Когда `x IS NOT NULL` не совпадает с` NOT (x IS NULL) `

Для чего x есть

Выражение x IS NOT NULL равно, не равному NOT(x IS NULL), как в случае с 2VL

(цитата из этого ответа, в которой цитируются практические вопросы Фабиана Паскаля в области управления базами данных - справочник для практикующего мышления - в конце этого ответа)

Мое предположение, когда x IS NULL равно NULL, но я не могу догадаться, когда это будет (например, я не проверил стандарт SQL). Это предположение было неверным.

Ответ 1

Из того, что я читал, Фабиан Паскаль не имеет в виду скалярное значение по сравнению с Null, но редко реализуемым типом ROW. В стандарте идея заключалась в том, что вы можете сравнить таблицу (строк) с помощью IS NULL, чтобы определить, были ли все значения установлены на значение NULL. Таким образом, X IS NULL будет означать, что все значения были установлены в значение NULL, X IS NOT NULL означало бы, что никакие значения не были установлены в значение NULL, а NOT (X IS NULL) означало бы, что не все значения были установлены в значение NULL или, сказал другой способ, существовало хотя бы одно значение, не установленное в NULL. Конечно, я нахожусь на плечах гигантов здесь, но это то, как я интерпретирую его выражение.

Ответ 2

x IS NULL никогда не будет NULL, поэтому они одинаковы для всех x

Таблица истины ahoy:

+--------+-------------+---------+--------------+
|   x    |x IS NOT NULL|x IS NULL|NOT(x IS NULL)|
+--------+-------------+---------+--------------+
|NULL    |    FALSE    |  TRUE   |    FALSE     |
|NOT NULL|    TRUE     |  FALSE  |    TRUE      |
+--------+-------------+---------+--------------+

Обратите внимание, что столбцы два и четыре одинаковы для всех потенциальных значений x (либо NULL, либо NOT NULL)