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.