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)