Skip to content

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).


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 NULL si elle est optionnelle.
  • NULL n’est pas égal à NULL : deux valeurs NULL sont considérées comme distinctes (car elles sont inconnues).
  • Les opérateurs de comparaison classiques (=, <>, <, >, etc.) ne fonctionnent pas avec NULL. Utiliser ma_colonne = NULL est une erreur logique (cela retournera toujours UNKNOWN).

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 table
WHERE nom_colonne IS NOT NULL

💡 Bon à savoir : L’opérateur IS retourne en réalité un booléen (TRUE ou FALSE). Il peut également être utilisé dans d’autres contextes, comme avec des sous-requêtes.


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.

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 utilisateur
WHERE fk_adresse_livraison_id IS NULL

Ré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 utilisateur
WHERE fk_adresse_livraison_id IS NOT NULL

Ré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

-- ❌ MAUVAISE PRATIQUE (ne retournera rien)
SELECT *
FROM utilisateur
WHERE fk_adresse_livraison_id = NULL
-- ✅ BONNE PRATIQUE
SELECT *
FROM utilisateur
WHERE fk_adresse_livraison_id IS NULL

2. 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 utilisateur
WHERE fk_adresse_livraison_id <> 12

Cette 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 utilisateur
WHERE fk_adresse_livraison_id <> 12
OR fk_adresse_livraison_id IS NULL

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 pas
UPDATE utilisateur
SET fk_adresse_facturation_id = 99
WHERE fk_adresse_facturation_id IS NULL;
-- Supprimer les utilisateurs sans adresse (attention, destructeur !)
DELETE FROM utilisateur
WHERE fk_adresse_livraison_id IS NULL
AND fk_adresse_facturation_id IS NULL;

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