Lorsque vous travaillez avec SQL Server, il est important de comprendre le concept de NULL. En termes simples, NULL représente une valeur inconnue. Par exemple, si vous avez une variable binaire qui peut être soit 1 soit 0, elle peut également être inconnue (c’est-à-dire NULL).
Prenons un exemple:
DECLARE @Bin Binary
DECLARE @Bin2 Binary
SET @Bin = 1
SET @Bin2 = NULL
SELECT (@Bin = 1) -- Renvoie True
SELECT (@Bin = 0) -- Renvoie False
SELECT (@Bin = NULL) -- Renvoie NULL
SELECT (@Bin2 = 1) -- Renvoie NULL
SELECT (@Bin2 = 0) -- Renvoie NULL
SELECT (@Bin2 = NULL) -- Renvoie NULL
Comme vous pouvez le voir, toute comparaison impliquant NULL renvoie NULL. Cela est dû au fait que tant qu’une valeur n’est pas attribuée à une variable, sa valeur est inconnue. En fait, vous pouvez mentalement remplacer NULL par “inconnu” dans vos comparaisons.
Alors, comment NULL affecte-t-il les requêtes d’agrégat? Prenons un autre exemple:
CREATE TABLE #NullTest (MyVal binary)
INSERT INTO #NullTest VALUES (1),(1),(0),(0),(NULL)
SELECT COUNT(1) FROM #NullTest WHERE MyVal = 1 -- Renvoie 2
SELECT COUNT(1) FROM #NullTest WHERE MyVal = 0 -- Renvoie 2
SELECT COUNT(1) FROM #NullTest WHERE MyVal = NULL -- Renvoie 0
Dans ce cas, nous avons cinq lignes dans la table, mais la troisième requête renvoie 0. Cela est dû au fait que les valeurs NULL ne sont pas incluses dans l’ensemble de résultats lorsqu’elles sont comparées à une valeur spécifique.
Il existe quelques façons de contourner ce problème. Une option consiste à utiliser la fonction ISNULL, qui renvoie une valeur spécifiée si l’expression est NULL. Par exemple:
SELECT COUNT(1) FROM #NullTest WHERE ISNULL(MyVal, 0) = 1
Une autre option consiste à utiliser l’opérateur “IS NULL”, qui vérifie si une valeur est NULL. Par exemple:
SELECT COUNT(1) FROM #NullTest WHERE MyVal = 1 OR MyVal IS NULL
Lors de l’utilisation de l’opérateur “IS NULL”, soyez prudent avec l’opérateur OR pour éviter les erreurs logiques. Pour les requêtes complexes, il est recommandé d’utiliser des parenthèses pour garantir l’application de la logique souhaitée.
Il est important de comprendre les implications de NULL dans SQL Server et de planifier en conséquence si vous autorisez des valeurs NULL dans vos colonnes. En comprenant comment NULL se comporte dans les comparaisons et les requêtes d’agrégat, vous pouvez éviter des résultats inattendus et garantir une analyse précise des données.
N’oubliez pas, NULL est comme une valeur inconnue et nécessite une réflexion attentive dans vos requêtes SQL Server.
Merci de votre lecture!