Tuve una consulta (para Postgres e Informix) con una NOT INcláusula que contiene una subconsulta que en algunos casos devolvió NULLvalores, lo que provocó que esa cláusula (y la consulta completa) no devolvieran nada.
¿Cuál es la mejor manera de entender esto? Pensé NULLen algo sin valor y, por lo tanto, no esperaba que la consulta fallara, pero obviamente esa no es la forma correcta de pensar NULL.
fuente

x <> NULLque está resolviendoFALSE, esperaríaNOT (x <> NULL)evaluarTRUEy no lo hace. Ambos evalúan aUNKNOWN. El truco es que se selecciona una fila solo si laWHEREcláusula (si está presente) se evalúa comoTRUE: una fila se omite si la cláusula se evalúa comoFALSEoUNKNOWN. Este comportamiento (en general, y para elNOT INpredicado en particular) es obligatorio por el estándar SQL.NULL NOT IN (some_subquery)debe devolver la fila exterior, excepto sisome_subqueryno devuelve ninguna fila. Es por eso que el plan de ejecución cuando ambas columnas son nulas puede ser considerablemente más costoso. Ejemplo de SQL Server