У меня был запрос (для Postgres и Informix) с NOT IN
предложением, содержащим подзапрос, который в некоторых случаях возвращал NULL
значения, в результате чего это предложение (и весь запрос) ничего не возвращало.
Какой лучший способ понять это? Я думал, NULL
что это что-то без значения, и поэтому не ожидал, что запрос потерпит неудачу, но, очевидно, это неправильный способ мышления NULL
.
x <> NULL
разрешениеFALSE
, вы можете рассчитыватьNOT (x <> NULL)
на оценкуTRUE
, а это не так. Оба оцениваютUNKNOWN
. Хитрость заключается в том, что строка выбирается только в том случае, еслиWHERE
предложение (если присутствует) оценивается какTRUE
- строка опускается, если предложение оценивается либо в,FALSE
либо вUNKNOWN
. Такое поведение (в целом и дляNOT IN
предиката в частности) предписывается стандартом SQL.