Visualiseur NATURAL JOIN SQL
Le NATURAL JOIN joint automatiquement deux tables sur toutes les colonnes ayant le
même nom dans les deux tables. Aucune clause ON n’est nécessaire.
Requête SQL
Table A
Table B
Résultat du NATURAL JOIN
Paires correspondantes
Chaque paire montre les lignes de A et B qui partagent la même valeur sur la ou les colonnes communes.
La difficulté principale du NATURAL JOIN n’est pas sa syntaxe — elle est la plus courte de toutes les jointures SQL — mais de comprendre quelles colonnes le moteur choisit automatiquement comme clés de jointure, et quelles lignes sont conservées ou ignorées dans chaque table. L’outil répond exactement à ces deux questions en rendant visibles les colonnes communes (surlignées en bleu dans les en-têtes), les lignes qui trouvent une correspondance (en vert) et celles qui n’en trouvent pas (en rouge), le tout sur trois jeux de données différents. Le diagramme de Venn des colonnes, le tableau de résultat et les cartes de paires correspondantes éliminent l’ambiguïté que génère systématiquement une documentation textuelle.
Qu’est ce que le NATURAL JOIN et sa différence avec INNER JOIN
Le NATURAL JOIN effectue une jointure de type INNER JOIN sans que vous ayez à écrire de clause ON. Le moteur inspecte les noms de colonnes des deux tables et joint automatiquement sur toutes les colonnes qui portent le même nom et le même type de données dans les deux tables. Si aucune colonne commune n’existe, le résultat est un produit cartésien (équivalent d’un CROSS JOIN), ce que l’outil signale par un avertissement orange.
La différence fondamentale avec INNER JOIN ... ON est le niveau de contrôle. Avec INNER JOIN, vous choisissez explicitement la condition de jointure. Avec NATURAL JOIN, c’est le moteur qui décide en se basant uniquement sur les noms de colonnes. Si deux colonnes portent accidentellement le même nom sans relation logique entre elles, NATURAL JOIN les utilise quand même comme clés, ce qui peut produire des résultats inattendus sans aucun message d’erreur.
-- Syntaxe NATURAL JOIN — aucune clause ON
SELECT *
FROM produits
NATURAL JOIN categories;
-- Équivalent INNER JOIN explicite (si la colonne commune est categorie_id)
SELECT *
FROM produits p
INNER JOIN categories c ON p.categorie_id = c.categorie_id;
Les 3 jeux de données disponibles
L’outil propose trois jeux de données sélectionnables dans un menu déroulant, couvrant trois structures relationnelles différentes. Chacun illustre un aspect distinct du comportement du NATURAL JOIN.
- Produits et Catégories : la colonne commune est
categorie_id. La tableproduitscontient 4 lignes dont une aveccategorie_id = 3, absent de la tablecategories. Cette ligne est affichée en rouge — non conservée dans le résultat. - Employés et Départements : la colonne commune est
dept_id. L’employée Olivia (dept_id = 99) n’a pas de département correspondant et est exclue du résultat. Le département Finance (dept_id = 40) n’a pas d’employé et disparaît lui aussi. - Produits et Stock : la colonne commune est
code. Les produitsA3etA4n’apparaissent pas dans la table stock et sont donc ignorés dans le résultat final.
Le diagramme de Venn des colonnes
Le diagramme SVG au centre de l’outil représente les colonnes des deux tables, non pas leurs lignes. Le cercle gauche liste les colonnes exclusives à la table A, le cercle droit celles exclusives à la table B, et l’intersection centrale (en bleu foncé) affiche les colonnes communes sur lesquelles la jointure s’effectue automatiquement. Cette représentation répond directement à la question que pose tout débutant : « sur quoi exactement le NATURAL JOIN joint-il ? »
La note sous le diagramme indique explicitement les noms des colonnes utilisées comme clés, par exemple : Jointure automatique sur : categorie_id. Si l’intersection est vide, l’avertissement orange s’active pour signaler que le résultat sera un produit cartésien, cas à éviter absolument en production.
Les paires correspondantes et le code couleur des tables
La section Paires correspondantes affiche chaque association réussie sous forme de carte côte à côte : la ligne de la table A à gauche, la ligne de la table B à droite, reliées par une flèche ↔. Ce niveau de détail permet de voir exactement quelles valeurs ont permis la correspondance, sans avoir à reconstituer mentalement la jointure depuis les deux tables séparées.
Dans les tables A et B, le code couleur suit une logique constante :
- Bleu sur les en-têtes de colonnes communes, pour identifier visuellement les clés de jointure automatique
- Vert sur les lignes conservées dans le résultat (correspondance trouvée)
- Rouge sur les lignes exclues (aucune correspondance dans l’autre table)
-- Jeu de données : Produits et Catégories
-- Colonne commune détectée automatiquement : categorie_id
SELECT *
FROM produits
NATURAL JOIN categories;
-- Résultat (3 lignes sur 4) :
-- categorie_id | nom | prix | libelle
-- 1 | Stylo | 2.50 | Papeterie
-- 2 | Cahier | 4.00 | Fournitures
-- 1 | Crayon | 0.80 | Papeterie
-- ❌ Calculette (categorie_id=3) exclue — categorie_id=3 absent de categories
Les toggles d’affichage et le bouton Partager
L’outil propose six cases à cocher pour masquer ou afficher indépendamment chaque section : table A, table B, diagramme, paires, résultat et requête SQL. Cette granularité permet de concentrer l’attention sur une seule dimension à la fois — par exemple masquer le résultat pour prédire mentalement quelles lignes seront conservées, puis cocher la case pour vérifier. Le bouton Partager utilise l’API native navigator.share si disponible, ou copie l’URL dans le presse-papiers avec un toast de confirmation.
Quand utiliser NATURAL JOIN et quand l’éviter
NATURAL JOIN est adapté uniquement quand la convention de nommage des colonnes est rigoureuse et documentée. Il est particulièrement lisible dans des schémas maîtrisés où les clés étrangères portent systématiquement le même nom que leur clé primaire cible. En revanche, il devient dangereux dans les situations suivantes : colonnes techniques portant des noms génériques identiques (nom, date, code) dans deux tables sans relation logique entre elles, ou schémas maintenus par plusieurs équipes où un renommage de colonne peut silencieusement modifier le comportement de la jointure.
-- ⚠️ NATURAL JOIN non recommandé si les colonnes communes sont accidentelles
-- Si les deux tables ont une colonne "nom", elle sera utilisée comme clé
-- même si "nom" dans employes et "nom" dans produits n'ont aucun rapport
-- ✅ Préférer l'INNER JOIN explicite pour les requêtes de production
SELECT e.nom, d.departement
FROM employes e
INNER JOIN departements d ON e.dept_id = d.dept_id;