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