Tuve una consulta (para Postgres e Informix) con una NOT IN
cláusula que contiene una subconsulta que en algunos casos devolvió NULL
valores, lo que provocó que esa cláusula (y la consulta completa) no devolvieran nada.
¿Cuál es la mejor manera de entender esto? Pensé NULL
en algo sin valor y, por lo tanto, no esperaba que la consulta fallara, pero obviamente esa no es la forma correcta de pensar NULL
.
x <> NULL
que está resolviendoFALSE
, esperaríaNOT (x <> NULL)
evaluarTRUE
y no lo hace. Ambos evalúan aUNKNOWN
. El truco es que se selecciona una fila solo si laWHERE
cláusula (si está presente) se evalúa comoTRUE
: una fila se omite si la cláusula se evalúa comoFALSE
oUNKNOWN
. Este comportamiento (en general, y para elNOT IN
predicado en particular) es obligatorio por el estándar SQL.