IS NULL / IS NOT NULL – Gérer les valeurs manquantes
Bonne lecture et bon apprentissage !
Junior TSAFACK – 08/08/2026
⏱️ Temps de lecture estimé : 5 minutes
Dans le langage SQL, l’opérateur IS permet de filtrer les résultats qui contiennent la valeur NULL. Cet opérateur est indispensable car la valeur NULL est une valeur inconnue et ne peut par conséquent pas être filtrée par les opérateurs de comparaison classiques (égal, inférieur, supérieur ou différent).
Qu’est-ce que NULL ?
Section titled “Qu’est-ce que NULL ?”NULL en SQL représente une valeur inconnue ou absente. Ce n’est pas une chaîne vide ni zéro, mais l’absence totale de donnée.
- Une colonne peut contenir
NULLsi elle est optionnelle. NULLn’est pas égal àNULL: deux valeursNULLsont considérées comme distinctes (car elles sont inconnues).- Les opérateurs de comparaison classiques (
=,<>,<,>, etc.) ne fonctionnent pas avecNULL. Utiliserma_colonne = NULLest une erreur logique (cela retournera toujoursUNKNOWN).
Syntaxe
Section titled “Syntaxe”Pour filtrer les résultats où les champs d’une colonne sont à NULL, il convient d’utiliser la syntaxe suivante :
SELECT * FROM table WHERE nom_colonne IS NULLÀ l’inverse, pour filtrer les résultats et obtenir uniquement les enregistrements qui ne sont pas NULL :
SELECT *FROM tableWHERE nom_colonne IS NOT NULL💡 Bon à savoir : L’opérateur
ISretourne en réalité un booléen (TRUEouFALSE). Il peut également être utilisé dans d’autres contextes, comme avec des sous-requêtes.
Exemple concret
Section titled “Exemple concret”Imaginons une application qui possède une table contenant les utilisateurs. Cette table possède deux colonnes pour associer les adresses de livraison et de facturation à un utilisateur (grâce à une clé étrangère). Si un utilisateur n’a pas d’adresse de facturation ou de livraison, alors le champ reste à NULL.
Table « utilisateur »
Section titled “Table « utilisateur »”| id | nom | date_inscription | fk_adresse_livraison_id | fk_adresse_facturation_id |
|---|---|---|---|---|
| 23 | Grégoire | 2013-02-12 | 12 | 12 |
| 24 | Sarah | 2013-02-17 | NULL | NULL |
| 25 | Anne | 2013-02-21 | 13 | 14 |
| 26 | Frédérique | 2013-03-02 | NULL | NULL |
Exemple 1 : Utilisateurs sans adresse de livraison
Section titled “Exemple 1 : Utilisateurs sans adresse de livraison”Il est possible d’obtenir la liste des utilisateurs qui ne possèdent pas d’adresse de livraison en utilisant la requête SQL suivante :
SELECT *FROM utilisateurWHERE fk_adresse_livraison_id IS NULLRésultat :
| id | nom | date_inscription | fk_adresse_livraison_id | fk_adresse_facturation_id |
|---|---|---|---|---|
| 24 | Sarah | 2013-02-17 | NULL | NULL |
| 26 | Frédérique | 2013-03-02 | NULL | NULL |
Les enregistrements retournés montrent bien que seuls les utilisateurs ayant la valeur NULL pour le champ de l’adresse de livraison sont affichés.
Exemple 2 : Utilisateurs avec une adresse de livraison
Section titled “Exemple 2 : Utilisateurs avec une adresse de livraison”Pour obtenir uniquement les utilisateurs qui possèdent une adresse de livraison :
SELECT *FROM utilisateurWHERE fk_adresse_livraison_id IS NOT NULLRésultat :
| id | nom | date_inscription | fk_adresse_livraison_id | fk_adresse_facturation_id |
|---|---|---|---|---|
| 23 | Grégoire | 2013-02-12 | 12 | 12 |
| 25 | Anne | 2013-02-21 | 13 | 14 |
Pièges à éviter
Section titled “Pièges à éviter”1. Utiliser = au lieu de IS NULL
Section titled “1. Utiliser = au lieu de IS NULL”-- ❌ MAUVAISE PRATIQUE (ne retournera rien)SELECT *FROM utilisateurWHERE fk_adresse_livraison_id = NULL
-- ✅ BONNE PRATIQUESELECT *FROM utilisateurWHERE fk_adresse_livraison_id IS NULL2. NULL dans les opérateurs de comparaison
Section titled “2. NULL dans les opérateurs de comparaison”Si vous utilisez des opérateurs comme <> avec NULL :
-- ❌ NE FONCTIONNE PAS (ne retournera pas les lignes contenant NULL)SELECT *FROM utilisateurWHERE fk_adresse_livraison_id <> 12Cette requête ne retournera pas les utilisateurs ayant NULL car NULL <> 12 s’évalue à UNKNOWN (et non TRUE). Pour inclure les NULL, il faut les gérer explicitement :
SELECT *FROM utilisateurWHERE fk_adresse_livraison_id <> 12 OR fk_adresse_livraison_id IS NULL3. NULL et les fonctions d’agrégation
Section titled “3. NULL et les fonctions d’agrégation”Les fonctions d’agrégation comme COUNT, SUM, AVG, etc., ignorent généralement les valeurs NULL. Par exemple, COUNT(colonne) compte uniquement les valeurs non nulles.
Utilisation de IS NULL / IS NOT NULL avec d’autres commandes
Section titled “Utilisation de IS NULL / IS NOT NULL avec d’autres commandes”Bien que nous l’ayons vu principalement avec SELECT, ces opérateurs s’utilisent également avec UPDATE et DELETE :
-- Mettre à jour les adresses de facturation pour les utilisateurs qui n'en ont pasUPDATE utilisateurSET fk_adresse_facturation_id = 99WHERE fk_adresse_facturation_id IS NULL;
-- Supprimer les utilisateurs sans adresse (attention, destructeur !)DELETE FROM utilisateurWHERE fk_adresse_livraison_id IS NULL AND fk_adresse_facturation_id IS NULL;Prochain chapitre
Section titled “Prochain chapitre”Vous savez désormais comment gérer les valeurs manquantes avec IS NULL et IS NOT NULL. Mais comment trier les résultats de vos requêtes pour les organiser selon vos besoins ?
👉 Chapitre 11 : ORDER BY – Trier les résultats
Bonne continuation !
Junior TSAFACK – 08/08/2026