PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Perché PostgreSQL non restituisce valori null quando la condizione è <> true

Ogni RDBMS a metà strada lo fa allo stesso modo, perché è corretto .
Sto citando il manuale di Postgres qui:

Gli operatori di confronto ordinari producono null (che significa "sconosciuto"), nottrue o false, quando uno dei due input è nullo. Ad esempio, 7 = NULL yieldsnull, così come 7 <> NULL . Quando questo comportamento non è adatto, utilizzare IS [ NOT ] DISTINCT FROM costrutti:

expression IS DISTINCT FROM expression
expression IS NOT DISTINCT FROM expression

Nota che queste espressioni funzionano un po' più lentamente della semplice expression <> expression confronto.

Per boolean valori c'è anche il più semplice IS NOT [TRUE | FALSE] .
Per ottenere ciò che ti aspettavi nella tua seconda query, scrivi:

SELECT * FROM table WHERE avalue IS NOT TRUE;

SQL Fiddle.