SQL Pratique
INNER JOIN vs LEFT JOIN : différences et guide complet SQL
8 min de lecture

INNER JOIN vs LEFT JOIN : différences et guide complet SQL

Maîtrisez les différences entre INNER JOIN et LEFT JOIN en SQL. Guide pratique avec exemples, cas d'usage et exercices pour vos entretiens.

Avatar de Thomas LeroyThomas Leroy

INNER JOIN et LEFT JOIN sont les deux types de jointures les plus utilisés en SQL, mais ils produisent des résultats fondamentalement différents. L'INNER JOIN ne retourne que les lignes ayant une correspondance dans les deux tables, tandis que le LEFT JOIN conserve toutes les lignes de la table de gauche, même sans correspondance.

⚠️ Information importante

Cet article est fourni à titre informatif uniquement et ne constitue pas un conseil juridique, fiscal ou financier. Consultez un professionnel qualifié pour votre situation personnelle.

Cette distinction cruciale détermine le nombre de lignes retournées et peut drastiquement changer l'interprétation de vos analyses. Comprendre ces mécanismes est essentiel pour tout data analyst, car une mauvaise jointure peut fausser vos métriques et conclusions business.

📌 Ce qu'il faut retenir

  • INNER JOIN retourne uniquement les correspondances communes aux deux tables
  • LEFT JOIN conserve toutes les lignes de la table de gauche, avec NULL pour les non-correspondances
  • Le choix entre les deux dépend de votre objectif d'analyse (intersection vs exhaustivité)
  • LEFT JOIN produit généralement plus de résultats qu'INNER JOIN sur les mêmes données

Comprendre le fonctionnement d'INNER JOIN

L'INNER JOIN effectue une intersection entre deux tables. Il ne retourne que les lignes où la condition de jointure est satisfaite dans les deux tables. Cette jointure est idéale quand vous voulez analyser uniquement les éléments qui existent des deux côtés.

Considérons deux tables : utilisateurs et commandes. Un INNER JOIN entre ces tables ne retournera que les utilisateurs qui ont passé au moins une commande.

SELECT u.nom, c.montant
FROM utilisateurs u
INNER JOIN commandes c ON u.id = c.utilisateur_id;

Cette requête exclut automatiquement tous les utilisateurs sans commande et toutes les commandes sans utilisateur valide. C'est un comportement souhaité quand vous analysez le comportement d'achat de votre clientèle active.

L'INNER JOIN garantit l'intégrité des données en éliminant les orphelins. Il est particulièrement utile pour les analyses focalisées sur les relations existantes et les métriques de performance.

Maîtriser le LEFT JOIN et ses spécificités

Le LEFT JOIN (ou LEFT OUTER JOIN) préserve toutes les lignes de la table de gauche, qu'il y ait correspondance ou non. Pour les lignes sans correspondance, les colonnes de la table de droite sont remplies avec NULL.

Cette jointure est cruciale pour les analyses d'exhaustivité. Reprenons notre exemple avec les utilisateurs et commandes :

SELECT u.nom, c.montant
FROM utilisateurs u
LEFT JOIN commandes c ON u.id = c.utilisateur_id;

Cette requête retourne tous les utilisateurs, y compris ceux qui n'ont jamais commandé. Pour ces derniers, la colonne montant sera NULL.

Le LEFT JOIN est indispensable pour calculer des taux de conversion, identifier des segments non-actifs ou effectuer des analyses de couverture. Il révèle les "trous" dans vos données et permet une vision complète de votre base.

💡 Bon à savoir

Utilisez IS NULL après un LEFT JOIN pour identifier spécifiquement les enregistrements sans correspondance : WHERE c.utilisateur_id IS NULL.

Comparaison détaillée des résultats

La différence principale réside dans le traitement des non-correspondances. Voici un tableau comparatif avec un exemple concret :

Critère INNER JOIN LEFT JOIN
Lignes retournées Uniquement les correspondances Toutes les lignes de gauche
Gestion des NULL Aucune ligne NULL NULL pour non-correspondances
Performance Plus rapide sur gros volumes Plus lent, plus de données
Cas d'usage type Analyses des actifs Analyses d'exhaustivité

Prenons un exemple concret avec 1000 utilisateurs dont 700 ont commandé. L'INNER JOIN retournera 700 lignes (utilisateurs avec commandes), tandis que le LEFT JOIN retournera 1000 lignes (300 avec montant NULL).

Cette différence impacte directement vos calculs. Un AVG(montant) sur l'INNER JOIN calculera la moyenne des acheteurs, alors que sur le LEFT JOIN, cela dépendra du traitement des NULL par votre SGBD.

Choisir la bonne jointure selon le contexte

Le choix entre INNER JOIN et LEFT JOIN dépend de votre question business. Pour analyser les performances des clients actifs, utilisez INNER JOIN. Pour mesurer la pénétration de votre offre, optez pour LEFT JOIN.

Dans le contexte e-commerce, INNER JOIN est parfait pour analyser le panier moyen des acheteurs ou identifier les produits populaires. LEFT JOIN excelle pour calculer le taux de conversion global ou segmenter les prospects non-convertis.

Pour les analyses de rétention, comme expliqué dans notre guide sur le calcul du taux de rétention, LEFT JOIN est souvent nécessaire pour inclure tous les utilisateurs, même ceux qui ne reviennent jamais.

Les analyses de funnel nécessitent également LEFT JOIN pour capturer tous les utilisateurs à chaque étape, y compris ceux qui abandonnent. Consultez notre exercice sur les tunnels de conversion pour des exemples pratiques.

⚠️ Attention

Un INNER JOIN non intentionnel peut masquer des problèmes de qualité de données en excluant silencieusement les enregistrements orphelins.

Impact sur les performances et optimisation

Les performances diffèrent selon le type de jointure. INNER JOIN est généralement plus performant car il traite moins de données et peut s'arrêter dès qu'une non-correspondance est détectée.

LEFT JOIN doit parcourir toute la table de gauche, même s'il n'y a aucune correspondance. Sur des tables de millions de lignes, cette différence devient significative.

L'optimisation des requêtes SQL implique souvent de choisir la jointure la plus restrictive possible. Si votre analyse ne nécessite que les correspondances, préférez INNER JOIN.

Les index sur les colonnes de jointure améliorent considérablement les performances des deux types. Cependant, pour LEFT JOIN, indexer la table de droite est crucial pour éviter les parcours complets.

Gestion des valeurs NULL et implications

LEFT JOIN introduit des valeurs NULL qui nécessitent une gestion spécifique. Ces NULL ne sont pas des "zéros" mais représentent l'absence de correspondance.

Les fonctions d'agrégation traitent différemment les NULL. COUNT(*) les compte, mais COUNT(colonne) les ignore. SUM() ignore les NULL, ce qui peut créer des résultats inattendus.

Pour les métriques business, décidez explicitement du traitement des NULL. Utilisez COALESCE() ou ISNULL() pour les remplacer par des valeurs par défaut quand c'est approprié.

Les comparaisons avec NULL nécessitent IS NULL ou IS NOT NULL. L'égalité classique (= NULL) retourne toujours false, même pour des valeurs NULL.

Cas d'usage avancés et patterns courants

Certains patterns combinent les deux approches. Vous pouvez utiliser LEFT JOIN puis filtrer pour simuler un INNER JOIN avec plus de contrôle :

SELECT u.nom, c.montant
FROM utilisateurs u
LEFT JOIN commandes c ON u.id = c.utilisateur_id
WHERE c.utilisateur_id IS NOT NULL;

Ce pattern est utile quand vous voulez appliquer des conditions complexes sur la table de droite tout en contrôlant précisément le comportement de jointure.

Les analyses de gaps utilisent souvent LEFT JOIN pour identifier les manques. Par exemple, trouver les mois sans ventes en joignant une table de dates avec les ventes.

Pour les analyses temporelles avec les fonctions fenêtre, LEFT JOIN permet de conserver la continuité temporelle même en l'absence de données.

Questions fréquentes

Quand utiliser INNER JOIN plutôt que LEFT JOIN ?

Utilisez INNER JOIN quand votre analyse se concentre uniquement sur les éléments ayant une correspondance dans les deux tables. C'est idéal pour analyser les relations existantes : clients ayant acheté, produits vendus, ou utilisateurs actifs. INNER JOIN garantit que tous vos résultats ont des données complètes.

Pourquoi LEFT JOIN retourne-t-il plus de lignes qu'INNER JOIN ?

LEFT JOIN préserve toutes les lignes de la table de gauche, même celles sans correspondance dans la table de droite. Ces lignes supplémentaires contiennent des valeurs NULL pour les colonnes de droite. INNER JOIN élimine ces lignes orphelines, d'où un résultat plus restreint.

Comment gérer les valeurs NULL après un LEFT JOIN ?

Les NULL indiquent une absence de correspondance. Utilisez IS NULL pour les identifier, COALESCE() pour les remplacer, ou des conditions WHERE spécifiques. Dans les agrégations, décidez si vous voulez exclure ces lignes (WHERE colonne IS NOT NULL) ou les traiter avec une valeur par défaut.

LEFT JOIN est-il toujours plus lent qu'INNER JOIN ?

Généralement oui, car LEFT JOIN doit traiter plus de données et ne peut pas s'optimiser en s'arrêtant aux premières non-correspondances. Cependant, avec des index appropriés et sur de petits volumes, la différence peut être négligeable. Le choix doit primer sur les besoins fonctionnels.

Peut-on combiner INNER JOIN et LEFT JOIN dans la même requête ?

Absolument. C'est même courant dans les analyses complexes. Vous pouvez commencer par un LEFT JOIN pour préserver l'exhaustivité, puis ajouter des INNER JOIN pour des relations obligatoires. L'ordre des jointures influence le résultat final, planifiez votre logique soigneusement.

Conclusion

La maîtrise des différences entre INNER JOIN et LEFT JOIN est fondamentale pour tout professionnel de la data. Ces deux jointures servent des objectifs distincts : l'intersection pour INNER JOIN, l'exhaustivité pour LEFT JOIN.

Le choix correct dépend de votre question business et de l'impact souhaité sur vos métriques. Une mauvaise jointure peut fausser vos analyses et conduire à des décisions erronées.

Pratiquez ces concepts avec nos exercices SQL interactifs pour renforcer votre compréhension et vous préparer efficacement à vos entretiens techniques.

Prêt à vous entraîner ?

50 exercices SQL interactifs avec éditeur en ligne, chronomètre et feedback IA.

Voir les exercices