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.
Syntaxe
Section titled “Syntaxe”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.
Exemple concret
Section titled “Exemple concret”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 utilisateurNATURAL 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_idqui existe dans les deux tables. - L’utilisateur Sophie (id 3) n’apparaît pas car
pays_idestNULL→ pas de correspondance. - L’utilisateur Yann (id 4) apparaît avec
NULLpourpays_nom, carpays_id = 9999n’existe pas dans la tablepays. - 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_nomFROM utilisateurINNER 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 avec LEFT JOIN
Section titled “NATURAL JOIN avec LEFT JOIN”NATURAL JOIN peut aussi être combiné avec LEFT JOIN pour conserver toutes les lignes de la table de gauche :
SELECT *FROM utilisateurNATURAL 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
NULLpour les colonnes depays. - L’utilisateur Yann (id 4) apparaît avec
pays_id = 9999etpays_nom = NULL.
Avantages et inconvénients de NATURAL JOIN
Section titled “Avantages et inconvénients de NATURAL JOIN”Avantages
Section titled “Avantages”- Simplicité d’écriture : pas besoin de spécifier les conditions de jointure, le code est plus court.
- Moins de répétitions : pas besoin de préfixer les colonnes avec les noms de tables (sauf en cas d’ambiguïté).
- Moins d’erreurs de syntaxe : la condition de jointure est automatique.
Inconvénients
Section titled “Inconvénients”- Perte de contrôle : on ne sait pas toujours exactement sur quelles colonnes la jointure s’effectue.
- Risque de modifications inattendues : si on ajoute une colonne portant le même nom dans les deux tables, la jointure change de comportement.
- Moins de visibilité : la requête est moins explicite, ce qui peut la rendre difficile à comprendre pour un autre développeur.
- 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 JOINen production pour ces raisons.
Compatibilité entre SGBD
Section titled “Compatibilité entre SGBD”| 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 utilisateurINNER 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 table1INNER JOIN table2ON table1.id = table2.idAND table1.nom = table2.nomAND table1.pays_id = table2.pays_id;Bonnes pratiques
Section titled “Bonnes pratiques”-
Évitez
NATURAL JOINdans les applications critiques : préférez des jointures explicites avecONpour un contrôle total. -
Si vous utilisez
NATURAL JOIN, documentez-le : précisez sur quelles colonnes la jointure s’effectue. -
Utilisez
NATURAL LEFT JOINplutôt queNATURAL JOINpour éviter de perdre des lignes par accident. -
Préférez des noms de colonnes distincts pour éviter les jointures involontaires sur des colonnes qui ne devraient pas être liées.
-
Pour une meilleure lisibilité, utilisez des alias :
SELECT u.user_prenom, p.pays_nomFROM utilisateur uNATURAL JOIN pays p;Comparaison des types de jointures
Section titled “Comparaison des types de jointures”| 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é |
Prochain chapitre
Section titled “Prochain chapitre”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