Null в SQL
Сколько результатов вернет этот запрос?
SELECT * FROM ABS(null) as r WHERE (r >= 0) OR NOT (r >= 0)
Ответ
Правильный ответ — ни одного, потому что условие вернет ложь. А связано это с тем, что null
обрабатывается по особому, почти как NaN: почти любое выражение с ним возвращает null
: ABS(null)
— это null
, null >=0
и NOT null
— тоже. Можно сказать, что SQL реализует тернарную логику, где любое выражение может быть правдой, ложью или неизвестным. Поэтому стоит очень аккуратно писать запросы для nullable колонок, а еще лучше избегать их, если это возможно.
UPD:
Стоит дополнить, что вместо
WHERE (r IS NULL OR r != 'value')
можно использовать
WHERE r IS DISTINCT FROM 'value';
Комментарии