Toda O RDBMS meio decente faz da mesma maneira, porque é correto .
Estou citando o manual do Postgres aqui:
Operadores de comparação comuns produzem null (significando "desconhecido"), nottrue ou false, quando uma das entradas é nula. Por exemplo,7 = NULL
yieldsnull, assim como7 <> NULL
. Quando este comportamento não for adequado, use oIS [ NOT ] DISTINCT FROM
constrói:
expression IS DISTINCT FROM expression expression IS NOT DISTINCT FROM expression
Observe que essas expressões são um pouco mais lentas que a simples
expression <> expression
comparação. Para
boolean
valores há também o mais simples IS NOT [TRUE | FALSE]
.Para obter o que você esperava em sua segunda consulta, escreva:
SELECT * FROM table WHERE avalue IS NOT TRUE;
SQL Fiddle.