Skip to content

NATURAL JOIN – Jointure naturelle

Bonne lecture et bon apprentissage !
Junior TSAFACK – 08/08/2026
⏱️ Temps de lecture estimé : 4 minutes


Dans le langage SQL, la commande NATURAL JOIN permet de faire une jointure naturelle entre 2 tables. Cette jointure s’effectue à la condition qu’il y ait des colonnes du même nom et de même type dans les 2 tables. Le résultat d’une jointure naturelle est la création d’un tableau avec autant de lignes qu’il y a de paires correspondant à l’association des colonnes de même nom.

Bon à savoir : Puisqu’il faut le même nom de colonne sur les 2 tables, cela empêche d’utiliser certaines règles de nommage pour les colonnes. Il n’est par exemple pas possible de préfixer le nom des colonnes sous peine d’avoir malheureusement 2 noms de colonnes différents.


La jointure naturelle de 2 tables peut s’effectuer facilement, comme le montre la requête SQL suivante :

SELECT * FROM table1 NATURAL JOIN table2;

L’avantage d’un NATURAL JOIN est qu’il n’y a pas besoin d’utiliser la clause ON pour spécifier la condition de jointure. Le SGBD détermine automatiquement les colonnes à utiliser.


Une utilisation classique d’une telle jointure pourrait être l’utilisation dans une application qui utilise une table utilisateur et une table pays. Si la table utilisateur contient une colonne pour l’identifiant du pays, il sera possible d’effectuer une jointure naturelle.

Table « utilisateur » :

user_id user_prenom user_ville pays_id
1 Jérémie Paris 1
2 Damien Lyon 2
3 Sophie Marseille NULL
4 Yann Lille 9999
5 Léa Paris 1

Table « pays » :

pays_id pays_nom
1 France
2 Canada
3 Belgique
4 Suisse

Pour avoir la liste de tous les utilisateurs avec le pays correspondant, il est possible d’effectuer une requête SQL similaire à celle-ci :

SELECT *
FROM utilisateur
NATURAL JOIN pays;

Résultat :

pays_id user_id user_prenom user_ville pays_nom
1 1 Jérémie Paris France
2 2 Damien Lyon Canada
3 4 Yann Lille NULL
1 5 Léa Paris France

Observations :

  • La jointure a été effectuée sur la colonne pays_id qui existe dans les deux tables.
  • L’utilisateur Sophie (id 3) n’apparaît pas car pays_id est NULL → pas de correspondance.
  • L’utilisateur Yann (id 4) apparaît avec NULL pour pays_nom, car pays_id = 9999 n’existe pas dans la table pays.
  • Seules les colonnes communes (pays_id) apparaissent une seule fois dans le résultat.

Comparaison NATURAL JOIN vs INNER JOIN avec ON

Section titled “Comparaison NATURAL JOIN vs INNER JOIN avec ON”

La requête ci-dessus avec NATURAL JOIN est équivalente à la requête suivante avec INNER JOIN :

SELECT utilisateur.user_id, utilisateur.user_prenom, utilisateur.user_ville,
pays.pays_id, pays.pays_nom
FROM utilisateur
INNER JOIN pays ON utilisateur.pays_id = pays.pays_id;

Remarque : Avec INNER JOIN, on doit spécifier explicitement la condition de jointure et lister les colonnes pour éviter les doublons.


NATURAL JOIN peut aussi être combiné avec LEFT JOIN pour conserver toutes les lignes de la table de gauche :

SELECT *
FROM utilisateur
NATURAL LEFT JOIN pays;

Résultat :

pays_id user_id user_prenom user_ville pays_nom
1 1 Jérémie Paris France
2 2 Damien Lyon Canada
NULL 3 Sophie Marseille NULL
9999 4 Yann Lille NULL
1 5 Léa Paris France

Observations :

  • L’utilisateur Sophie (id 3) apparaît maintenant, avec NULL pour les colonnes de pays.
  • L’utilisateur Yann (id 4) apparaît avec pays_id = 9999 et pays_nom = NULL.

Avantages et inconvénients de NATURAL JOIN

Section titled “Avantages et inconvénients de NATURAL JOIN”
  1. Simplicité d’écriture : pas besoin de spécifier les conditions de jointure, le code est plus court.
  2. Moins de répétitions : pas besoin de préfixer les colonnes avec les noms de tables (sauf en cas d’ambiguïté).
  3. Moins d’erreurs de syntaxe : la condition de jointure est automatique.
  1. Perte de contrôle : on ne sait pas toujours exactement sur quelles colonnes la jointure s’effectue.
  2. Risque de modifications inattendues : si on ajoute une colonne portant le même nom dans les deux tables, la jointure change de comportement.
  3. Moins de visibilité : la requête est moins explicite, ce qui peut la rendre difficile à comprendre pour un autre développeur.
  4. Non-portable : tous les SGBD ne supportent pas NATURAL JOIN (SQL Server ne le supporte pas).

Recommandation : De nombreux développeurs et administrateurs de bases de données déconseillent l’utilisation de NATURAL JOIN en production pour ces raisons.


SGBD Support de NATURAL JOIN
PostgreSQL Oui
MySQL Oui (depuis la version 5.0)
Oracle Oui
SQLite Oui
SQL Server Non (pas supporté)

Alternative pour SQL Server :

SELECT *
FROM utilisateur
INNER JOIN pays ON utilisateur.pays_id = pays.pays_id;

NATURAL JOIN avec plusieurs colonnes communes

Section titled “NATURAL JOIN avec plusieurs colonnes communes”

Si deux tables ont plusieurs colonnes de même nom, NATURAL JOIN utilisera toutes ces colonnes dans la condition de jointure (comme un AND).

Exemple : Si table1 et table2 ont les colonnes id, nom et pays_id en commun, le NATURAL JOIN sera équivalent à :

SELECT *
FROM table1
INNER JOIN table2
ON table1.id = table2.id
AND table1.nom = table2.nom
AND table1.pays_id = table2.pays_id;

  1. Évitez NATURAL JOIN dans les applications critiques : préférez des jointures explicites avec ON pour un contrôle total.

  2. Si vous utilisez NATURAL JOIN, documentez-le : précisez sur quelles colonnes la jointure s’effectue.

  3. Utilisez NATURAL LEFT JOIN plutôt que NATURAL JOIN pour éviter de perdre des lignes par accident.

  4. Préférez des noms de colonnes distincts pour éviter les jointures involontaires sur des colonnes qui ne devraient pas être liées.

  5. Pour une meilleure lisibilité, utilisez des alias :

SELECT u.user_prenom, p.pays_nom
FROM utilisateur u
NATURAL JOIN pays p;

Type de jointure Condition de jointure Explicite Risque
INNER JOIN ON Spécifiée par le développeur Oui Faible
NATURAL JOIN Automatique (colonnes de même nom) Non Élevé
LEFT JOIN ON Spécifiée par le développeur Oui Faible
NATURAL LEFT JOIN Automatique (colonnes de même nom) Non Élevé

Vous savez désormais comment effectuer une jointure naturelle avec NATURAL JOIN. Il est maintenant temps d’aborder les sous-requêtes, qui permettent d’imbriquer des requêtes à l’intérieur d’autres requêtes.

👉 Chapitre 39 : Sous-requêtes (requêtes imbriquées)


Bonne continuation !
Junior TSAFACK – 08/08/2026