В ситуации, когда возможно появление неизвестных или неполных данных, разработчик имеет на выбор два варианта.
Первый вариант состоит в том, чтобы ограничиться использованием обычных типов данных и не использовать null-значения, а вместо неизвестных данных вводить либо нулевые значения, либо значения специального вида - например, договориться, что строка "АДРЕС НЕИЗВЕСТЕН" и есть те данные, которые нужно вводить вместо неизвестного адреса. В любом случае на пользователя (или на разработчика) ложится ответственность за правильную трактовку таких данных. В частности, может потребоваться написание специального программного кода, который в нужных случаях определял бы такие данные.
Второй вариант состоит в использовании null-значений вместо неизвестных данных. За кажущейся естественностью такого подхода скрываются более глубокие проблемы. Самой очевидной является необходимость использования трехзначной логики (three-valued logic, 3VL) при оперировании с данными, которые могут содержать null-значения. В трехзначной логике кроме значений T - ИСТИНА и F - ЛОЖЬ, введено значение U - НЕИЗВЕСТНО. Логическое значение U - это то же самое, что и null-значение. Трехзначная логика базируется на следующих таблицах истинности:
AND
OR
NOT
F
T
U
F
F
F
F
T
F
T
U
U
F
U
U
F
T
U
F
F
T
U
T
T
T
T
U
U
T
U
F
T
T
F
U
U
Зная о подобных следствиях трёхзначной логики, следует избегать применения null-значений для данных, участвующих в операциях, где результат должен быть точно известен.
Для обработки значений NULL при построении условия выбора используется ключевое слово IS NULL.