Sie denken an den CASE
Ausdruck wie es die null
als Eingabe für eine Funktion oder Operator nehmen wurde, wo null Eingabe im Allgemeinen in null Ausgabeergebnisse:
regress=> SELECT 't'::boolean = NULL::boolean;
bool
------
(1 row)
in der Tat verhält es sich in der Tat wie eine WHERE
Klausel in Bezug auf Null Handhabung:
craig=> SELECT 't' WHERE NULL;
?column?
----------
(0 rows)
In WHERE
Klauseln - und in CASE
, wird ein NULL
Ergebnis von einem Testausdruck als "nicht wahr und daher falsch" behandelt. In mancher Hinsicht ist es bedauerlich, dass der SQL-Standard kein NULL
Ergebnis in einem WHERE
Ausdruck einen Fehler gemacht hat, anstatt es als falsch zu behandeln, aber so ist es.
Dies ist ein weiteres schmerzhaftes Symptom NULL
‚s gespaltene Persönlichkeit, wo die SQL-Spezifikation nicht, wenn NULL
bedeutet‚unbekannt/nicht definierten Wert‘oder‚das Fehlen eines Wertes‘, ähnlich wie das schreckliche Chaos mit NULL
entscheiden kann, s und Aggregate.
Also ist es nur wegen der SQL-Spezifikation? PostgreSQL-Entwickler haben es einfach übernommen, anstatt das "Richtige" zu tun _? Ich vermutete, dass das der Fall war. –
@ClodoaldoNETO Ja, und das ist so ziemlich die Politik, wo die Spec und die gesunde Welt konfligieren. In diesem Fall denke ich, dass es durchaus vernünftig ist; 'CASE' ist keine Funktion, es ist ein spezieller Ausdruck mit eigenen Regeln. Funktionen können sowieso eine spezielle Nullbehandlung haben; Beachte Oracles "Dekodieren". PostgreSQL kann das nicht beheben, ohne die SQL-Spezifikation neu zu schreiben, um die Verwirrung über Nullen vollständig zu beheben und dabei völlig inkompatibel mit allem anderen da draußen zu sein. –