Eu tive uma consulta (para Postgres e Informix) com uma NOT INcláusula contendo uma subconsulta que, em alguns casos, retornava NULLvalores, fazendo com que a cláusula (e toda a consulta) falhasse ao retornar qualquer coisa.
Qual é a melhor maneira de entender isso? Eu pensei que era NULLalgo sem valor e, portanto, não esperava que a consulta falhasse, mas obviamente essa não é a maneira correta de pensar NULL.
x <> NULLresolvendoFALSE, vocêNOT (x <> NULL)deve avaliarTRUE, e não. Ambos avaliam aUNKNOWN. O truque é que uma linha é selecionada apenas se aWHEREcláusula (se presente) for avaliada comoTRUE- uma linha será omitida se a cláusula for avaliada comoFALSEouUNKNOWN. Esse comportamento (em geral, e para oNOT INpredicado em particular) é obrigatório pelo padrão SQL.