NULL-Werte und Verknüpfungen
Wenn die Spalten der zu verknüpfenden Tabellen NULL-Werte enthalten, werden diese Werte nicht als übereinstimmend angesehen. Das Vorhandensein von NULL-Werten in einer Spalte aus einer der verknüpften Tabellen kann nur mithilfe einer äußeren Verknüpfung zurückgegeben werden (es sei denn, die WHERE-Klausel schließt NULL-Werte aus).
Es folgen zwei Tabellen, bei denen NULL in der Spalte enthalten ist, die Bestandteil der Verknüpfung ist.
table1 table2
a b c d
------- ------ ------- ------
1 one NULL two
NULL three 4 four
4 join4
Eine Verknüpfung, die die Werte in der a-Spalte mit denen der c-Spalte vergleicht, erhält keine Übereinstimmung für die Zeilen, die NULL-Werte enthalten:
SELECT *
FROM table1 t1 JOIN table2 t2
ON t1.a = t2.c
ORDER BY t1.a
Nur eine Zeile mit dem Wert 4 in der a-Spalte und der c-Spalte wird zurückgegeben:
a b c d
----------- ------ ----------- ------
4 join4 4 four
(1 row(s) affected)
Außerdem sind aus einer Basistabelle zurückgegebene NULL-Werte schwer von den von einer äußeren Verknüpfung zurückgegebenen NULL-Werten zu unterscheiden. Die folgende SELECT-Anweisung führt z. B. eine linke äußere Verknüpfung für diese beiden Tabellen aus:
SELECT *
FROM table1 t1 LEFT OUTER JOIN table2 t2
ON t1.a = t2.c
ORDER BY t1.a
Dies ist das Resultset.
a b c d
----------- ------ ----------- ------
NULL three NULL NULL
1 one NULL NULL
4 join4 4 four
(3 row(s) affected)
In den Ergebnissen ist ein NULL-Wert in den Daten nicht ohne weiteres von einem NULL-Wert zu unterscheiden, der eine fehlgeschlagene Verknüpfung darstellt. Wenn NULL-Werte in den zu verknüpfenden Daten enthalten sind, empfiehlt es sich, sie durch eine normale Verknüpfung aus den Ergebnissen auszuschließen.