Valeurs NULL et jointures

Si certaines colonnes de tables jointes contiennent des valeurs NULL, ces valeurs NULL ne correspondent pas les unes aux autres. La présence de valeurs NULL dans une colonne d'une des tables jointes ne peut être retournée que si vous utilisez une jointure externe (sauf si la clause WHERE exclut les valeurs NULL).

Les deux tables suivantes contiennent chacune des valeurs NULL dans les colonnes participant à la jointure :

table1                          table2
a           b                   c            d
-------     ------              -------      ------
      1        one                 NULL         two
   NULL      three                    4        four
      4      join4

Une jointure qui compare les valeurs de la colonne a à celles de la colonne c ne trouve pas de correspondance dans les colonnes qui comportent des valeurs NULL :

SELECT *
FROM table1 t1 JOIN table2 t2
   ON t1.a = t2.c
ORDER BY t1.a

Seule une ligne comportant la valeur 4 dans les colonnes a et c est retournée :

a           b      c           d      
----------- ------ ----------- ------ 
4           join4  4           four   

(1 row(s) affected)

Les valeurs NULL retournées d'une table de base sont également difficiles à distinguer des valeurs NULL retournées d'une jointure externe. Par exemple, l'instruction SELECT suivante effectue une jointure externe gauche sur ces deux tables :

SELECT *
FROM table1 t1 LEFT OUTER JOIN table2 t2
   ON t1.a = t2.c
ORDER BY t1.a

Voici l'ensemble des résultats. 

a           b      c           d      
----------- ------ ----------- ------ 
NULL        three  NULL        NULL 
1           one    NULL        NULL 
4           join4  4           four   

(3 row(s) affected)

Dans les résultats, il est difficile d'établir la différence entre une valeur NULL provenant des données et une valeur NULL représentant un échec de jointure. Lorsque des valeurs NULL figurent dans des données à joindre, il est préférable de les retirer des résultats en employant une jointure normale.

Voir aussi

Autres ressources

sp_dbcmptlevel (Transact-SQL)
WHERE (Transact-SQL)

Aide et Informations

Assistance sur SQL Server 2005