
SQL : NULL, qu'est ce que c'est ?
Apprenez à gérer les valeurs NULL en SQL avec COALESCE, ISNULL, IS NULL/NOT NULL. Évitez les erreurs dans les jointures et agrégations.

Déjà eu des résultats pourris à cause de champs NULL dans vos requêtes SQL ? 🧨
Le NULL, c’est ce truc qui veut dire "pas de valeur ici" mais qui complique TOUT en base de données !
Dans ce guide, on déchire le mythe : définition claire, astuces avec COALESCE/ISNULL, et comment éviter les valeurs manquantes qui tuent vos jointures ou agrégations.
Comprendre NULL en SQL : le concept d'absence
En SQL, NULL
marque l’absence de valeur dans une colonne, pas une valeur réelle. Le langage SQL l’utilise pour dire "je n’ai pas d’info ici". C’est capital pour représenter une donnée inconnue, non renseignée ou simplement inapplicable dans le contexte. NULL
, en résumé, c’est un blanc dans votre base de données qui veut dire quelque chose.
Quand vous voyez NULL
, ne croyez pas qu’il s’agit d’un zéro ou d’une chaîne vide. NULL
signifie "pas de donnée", alors qu’un zéro a une valeur précise, une chaîne vide existe mais reste vide. Par exemple, un champ numéro_rue
NULL signifie "je sais pas", tandis qu’un zéro dit "il n’y a rien". Ces distinctions influencent vos requetes et leurs resultats, surtout en matière de comparaison ou de calculs.
Utilisation pratique de NULL dans vos requêtes SQL
Comment filtrer les données avec NULL
Pour repérer les données manquantes, utilisez IS NULL
. À l'inverse, IS NOT NULL
montre les données renseignées. WHERE
vous permet de cibler ces valeurs absentes.
Imaginez un champ ville
dans une table utilisateurs
. Pour lister les profils sans ville renseignée, la requête devient SELECT * FROM utilisateurs WHERE ville IS NULL
. À l'inverse, IS NOT NULL
affiche uniquement les profils complets. Ces opérateurs changent tout dans vos résultats.
NULL et les opérations logiques en SQL
Le NULL
perturbe la logique classique avec AND
, OR
et NOT
. En SQL, une condition avec NULL
renvoie UNKNOWN
plutôt que TRUE
ou FALSE
.
- NOT NULL = UNKNOWN : L’inversion d’une valeur inconnue reste inconnue
- TRUE AND UNKNOWN = UNKNOWN : Une condition vraie combinée à une inconnue donne un résultat incertain
- FALSE AND UNKNOWN = FALSE : Une condition fausse annule toujours le résultat même avec un UNKNOWN
- TRUE OR UNKNOWN = TRUE : Une condition vraie masque les incertitudes
- FALSE OR UNKNOWN = UNKNOWN : Une condition fausse associée à une inconnue maintient l’incertitude
Quand vous écrivez WHERE (ville IS NULL OR ville = 'Paris')
, la logique tri-valente prend le relais. Si ville
est NULL
, l'expression ville = 'Paris'
donne UNKNOWN
mais OR
suffit à valider la condition. En revanche, AND
échoue si l'une des deux expressions est UNKNOWN
.
{{formation-sql="/brouillon"}}
Gestion des valeurs NULL en SQL : astuces et bonnes pratiques
Les fonctions COALESCE et ISNULL pour remplacer NULL
COALESCE remplace les valeurs manquantes par une valeur par défaut. Standard SQL, elle renvoie la première non-NULL d'une liste. ISNULL, spécifique à SQL Server, fait pareil mais avec deux arguments max. COALESCE est plus flexible pour gérer les NULL dans les requêtes.
COALESCE suit le standard SQL, ISNULL est propre à SQL Server. COALESCE accepte plusieurs arguments, ISNULL seulement deux. Le type de retour varie : COALESCE prend la priorité des types, ISNULL celui du premier paramètre. Les colonnes créées avec COALESCE sont NULLables, pas celles avec ISNULL.
NULL et les jointures : pièges à éviter
Les NULL dans les colonnes de jointure excluent des lignes avec INNER JOIN. LEFT/RIGHT JOIN conservent les données d'une table, même avec NULL dans l'autre. Comprenez ces impacts pour éviter des résultats incomplets.
Un INNER JOIN ignore les lignes où les colonnes de jointure sont NULL. Un LEFT JOIN garde les lignes de la table de gauche, remplissant avec NULL si pas de match. Pour des jointures robustes, utilisez COALESCE ou des conditions IS NULL dans la clause ON. Le guide sur les jointures SQL explique comment gérer ces cas.
NULL et les fonctions d'agrégation
Les fonctions d'agrégation comme COUNT, SUM ou AVG ignorent les valeurs NULL. COUNT() compte toutes les lignes, y compris celles avec NULL. Comprenez ces comportements pour des statistiques fiables.
Dans un GROUP BY, les NULL se regroupent en une seule catégorie. Pour inclure les NULL dans les calculs, utilisez COALESCE pour les remplacer par 0. COUNT(colonne) ignore les NULL, COUNT() non. Ces nuances influencent vos analyses.
Le tri des résultats avec NULL : NULLS FIRST et NULLS LAST
NULLS FIRST/LAST positionne les valeurs NULL en début ou fin avec ORDER BY. MySQL et SQL Server les placent en premier en tri ascendant, PostgreSQL en dernier. Maîtrisez ces options pour contrôler le tri.
Pour trier des données utilisateurs avec champ NULL, MySQL/SQL Server montrent les NULL en premier en ASC, PostgreSQL en dernier. PostgreSQL/Oracle acceptent NULLS FIRST/LAST. Exemple : ORDER BY ville NULLS LAST
force les NULL à la fin. Adaptez votre syntaxe selon le SGBD.
NULL dans la conception de base de données
NULL vs NOT NULL : quand les utiliser?
Les colonnes NULL acceptent les données manquantes, les colonnes NOT NULL imposent une valeur obligatoire. La création de tables SQL détermine ces contraintes.
Utilisez NULL et NOT NULL pour les champs optionnels et critiques. La logique métier dicte ces choix. Dans un CRM, un nom est NOT NULL, un numéro de fax peut être NULL.
NULL et les clés primaires/étrangères
Les clés primaires doivent être NOT NULL pour garantir l'unicité. Les clés étrangères peuvent être NULL, matérialisant une relation optionnelle.
Une clé primaire NULL briserait l’unicité des enregistrements. En revanche, une clé étrangère NULL signale une absence de lien. La clé étrangère NULL permet des relations 0-x. Un employé peut avoir un manager NULL s’il n’en a pas.
Valeurs par défaut vs NULL pour les données manquantes
NULL représente une information inconnue, DEFAULT remplace les données manquantes par une valeur logique. Le choix dépend du sens des données.
- Préférez NULL quand l'information est inconnue (ex : ville non renseignée)
- Choisissez DEFAULT quand une valeur standard a du sens (ex : date d'inscription = maintenant)
- Utilisez NOT NULL avec DEFAULT pour garantir la présence d'une valeur par défaut
Voici comment définir ces contraintes : CREATE TABLE users (id INT NOT NULL, name VARCHAR(50), country VARCHAR(2) DEFAULT 'FR')
. Ici, country
vaut 'FR' si aucune donnée n’est fournie. NULL reste possible pour name
.
Impact de NULL sur les performances des requêtes
Les colonnes NULL n’impactent pas significativement les performances. Les index peuvent contenir des valeurs NULL, mais les SGBD gèrent mieux les index NOT NULL. Les jointures avec des clés pouvant être NULL ralentissent les requêtes. Optimiser les structures en évitant les NULL inutiles améliore les performances.
En SQL, NULL représente une valeur manquante, pas l’absence de données. Contrairement à zéro ou une chaîne vide, il sert à indiquer une information inconnue. Maîtrisez les clauses IS NULL, les fonctions COALESCE et les jointures adaptées pour éviter les pièges. Appliquez ces astuces pour des requêtes précises et des analyses fiables : vous maîtriserez les valeurs NULL comme un pro ! 🚀
{{formation-sql="/brouillon"}}
Les derniers articles sur ce sujet


SQL : NULL, qu'est ce que c'est ?
