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 = NULLyieldsnull, assim como7 <> NULL. Quando este comportamento não for adequado, use oIS [ NOT ] DISTINCT FROMconstró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.