Cada RDBMS medianamente decente lo hace de la misma manera, porque es correcto .
Estoy citando el manual de Postgres aquí:
Los operadores de comparación ordinarios dan como resultado nulo (que significa "desconocido"), ni verdadero ni falso, cuando cualquiera de las entradas es nula. Por ejemplo, 7 = NULL yieldsnull, al igual que 7 <> NULL . Cuando este comportamiento no sea adecuado, use el IS [ NOT ] DISTINCT FROM construcciones:
expression IS DISTINCT FROM expression
expression IS NOT DISTINCT FROM expression
Tenga en cuenta que estas expresiones funcionan un poco más lento que la simple expression <> expression comparación.
Para boolean valores también existe el IS NOT [TRUE | FALSE] .
Para obtener lo que esperaba en su segunda consulta, escriba:
SELECT * FROM table WHERE avalue IS NOT TRUE; Violín SQL.