В некоторых СУБД, например в SQLite, разрешено использовать значение NULL в первичных ключах из-за ошибки в кодировании. 2
Согласно стандарту SQL, первичный ключ всегда должен подразумевать значение NOT NULL. 2 Но в SQLite разработчики не стали исправлять ошибку, так как опасались нарушить работу широко используемого кода. 2
В целом современные СУБД допускают использование null-значений, потому что данные часто бывают неполными или неизвестными. 1 Null-значение — это не значение, а маркер, показывающий, что значение неизвестно. 1