Сколько результатов вернет этот запрос?

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';