Для чего бы то ни было, сравнение чего-либо с NULL не является строго ложным, это неизвестно . Кроме того, NOT
неизвестно до сих пор неизвестно.
ANSI SQL-99 определяет предикат IS [NOT] DISTINCT FROM
. Это позволяет смешивать нулевые и ненулевые значения в сочетаниях и всегда получать значение true или false. Нулевой по сравнению с нулевым, таким образом, является истинным, в противном случае любой ненулевой по сравнению с нулевым является ложным. Так что отрицание работает так, как вы, вероятно, ожидаете.
PostgreSQL, IBM DB2 и Firebird поддерживают IS [NOT] DISTINCT FROM
.
MySQL имеет аналогичный нулевой безопасный оператор сравнения <=>
, который возвращает истину, если операнды одинаковы, и ложь, если они разные.
У Oracle самый сложный путь. Вы должны проявить творческий подход, используя NVL()
или логические выражения:
WHERE a = b OR (a IS NULL AND b IS NULL)
Тьфу.