C.J. Дата в своей книге «SQL и теория отношений» (2009: O'Reilly; ISBN 978-0-596-52306-0) занимает очень сильную позицию против NULL. Он демонстрирует, что наличие NULL в SQL дает неправильные ответы на определенные запросы. (Аргумент не применяется к самой реляционной модели, поскольку реляционная модель не допускает значения NULL.)
Я постараюсь обобщить его пример словами. Он представляет таблицу S с атрибутами SNO (номер поставщика) и город (город, в котором находится поставщик) и одну строку: (S1, Лондон). Также таблица P с атрибутами PNO (номер детали) и City (город, в котором производится деталь) и одной строкой: (P1, NULL). Теперь он выполняет запрос «Получить (SNO, PNO) пары, в которых либо города-поставщики, либо города-детали отличаются, либо город-часть не является Парижем (или оба)».
В реальном мире P1 создается в городе, который является или не является Парижем, поэтому запрос должен возвращаться (S1, P1), потому что город-часть либо является Парижем, либо не Парижем. (Простое присутствие P1 в таблице P означает, что с деталью связан город, даже если он неизвестен.) Если это Париж, то города-поставщики и детали различаются. Если это не Париж, то часть города не является Парижем. Однако, по правилам трехзначной логики, ('London' <> NULL) оценивается как UNKNOWN, (NULL <> 'Paris') оценивается как UNKNOWN, а UNKNOWN OR UNKNOWN уменьшается до UNKNOWN, что не является ИСТИННЫМ (и не FALSE либо), и поэтому строка не возвращается. Результатом запроса «ВЫБРАТЬ S.SNO, P.PNO ИЗ S, P, ГДЕ S.CITY <> P.CITY OR P.CITY <> 'Paris'" является пустая таблица, неправильный ответ.
Я не эксперт и в настоящее время не готов принять здесь за или против. Я считаю, что С. Дж. Дэйт является одним из ведущих авторитетов в теории отношений.
P.S. Также верно, что вы можете использовать SQL как нечто отличное от реляционной базы данных. Он может делать много вещей.