Vai al contenuto principale

SQL INNER JOIN vs. OUTER JOIN: differenze principali

Comprendi la differenza tra SQL INNER JOIN e OUTER JOIN con esempi e schemi per migliorare le tue competenze di gestione dei database.
Aggiornato 3 giu 2026  · 4 min leggi

In questo tutorial ti spiego la differenza tra INNER JOIN e OUTER JOIN in SQL con alcuni esempi. Dopo aver chiarito questo punto, potresti voler seguire il nostro corso Joining Data in SQL, che tratta altri tipi di join interessanti, come SELF JOIN e CROSS JOIN, oltre a concetti più ampi come la teoria degli insiemi.

Risposta rapida

INNER JOIN restituisce solo le righe corrispondenti tra tabelle in base a una colonna comune, escludendo quelle non corrispondenti. Ad esempio, la query seguente mostra gli ordini con i dettagli del cliente solo quando c'è una corrispondenza.

-- Inner Join: Returns only matching rows from both tables
SELECT o.OrderID, c.CustomerName
FROM Orders o
INNER JOIN Customers c ON o.CustomerID = c.CustomerID;

OUTER JOIN include sia le righe corrispondenti sia quelle non corrispondenti di una o entrambe le tabelle. La query seguente restituisce tutti i clienti, inclusi quelli senza ordini.

-- Left Outer Join: Returns all rows from Customers and matching rows from Orders
SELECT c.CustomerName, o.OrderID
FROM Customers c
LEFT JOIN Orders o ON c.CustomerID = o.CustomerID;

Uno sguardo da vicino a SQL INNER JOIN e OUTER JOIN

Vediamo ora più nel dettaglio INNER JOIN e OUTER JOIN in SQL, uno alla volta. Mentre li analizziamo, considera le due tabelle seguenti:

Esempio di tabella employees.

Esempio di tabella employees. Immagine dell'autore.

Esempio di tabella departments.

Esempio di tabella departments. Immagine dell'autore.

Come funziona INNER JOIN

Un INNER JOIN recupera solo le righe con una corrispondenza in entrambe le tabelle in base alla condizione specificata. 

La query seguente seleziona employee_id, demployee_name, department_name e salary e poi restituisce le righe in cui esiste department_id.

-- Example: Get employees with matching departments
SELECT employees.employee_id, employees.employee_name, departments.department_name, employees.salary
FROM employees
INNER JOIN departments
-- Returns only employees assigned to a department
ON employees.department_id = departments.department_id;

Esempio di tabella unita con SQL INNER JOIN.

Esempio di tabella unita con SQL INNER JOIN. Immagine dell'autore.

Come funziona OUTER JOIN

L'OUTER JOIN include le righe non corrispondenti da una o entrambe le tabelle, a seconda del tipo di OUTER JOIN utilizzato.

LEFT OUTER JOIN (LEFT JOIN)

Il LEFT OUTER JOIN restituisce tutti i record della tabella di sinistra e i record corrispondenti della tabella di destra. Se non c'è corrispondenza, per le colonne della tabella di destra vengono restituiti valori NULL.

Nel seguente esempio vengono recuperati tutti i record della tabella employees, anche dove ci sono record non corrispondenti. I department_name mancanti per i dipendenti vengono restituiti come NULL.

-- Get all employees, even those without a department
SELECT employees.employee_id, employees.employee_name, departments.department_name, employees.salary
FROM employees
LEFT JOIN departments
ON employees.department_id = departments.department_id;

Esempio di tabella unita con SQL left outer join

Esempio di tabella unita con SQL left outer join. Immagine dell'autore.

LEFT JOIN e LEFT OUTER JOIN vengono usati in modo intercambiabile in SQL poiché entrambe le query recuperano tutte le righe dalla tabella di sinistra e le righe corrispondenti dalla tabella di destra.

RIGHT OUTER JOIN (RIGHT JOIN)

Il RIGHT OUTER JOIN restituisce tutti i record della tabella di destra e i record corrispondenti della tabella di sinistra. Le righe non corrispondenti nella tabella di sinistra restituiscono NULL.

La query seguente restituisce tutti i record della tabella departments, anche dove non ci sono dipendenti corrispondenti.

-- Get all departments, even those without employees
SELECT employees.employee_id, employees.employee_name, departments.department_name, employees.salary
FROM employees
RIGHT JOIN departments
ON employees.department_id = departments.department_id;

Esempio di tabella unita con SQL Right outer join.

Esempio di tabella unita con SQL Right outer join. Immagine dell'autore.

FULL OUTER JOIN

Il FULL OUTER JOIN combina i risultati dei left e right outer join. Restituisce tutti i record di entrambe le tabelle, riempiendo con NULL dove non esistono corrispondenze.

La query seguente restituisce tutti i record delle tabelle employees e departments, anche con righe non corrispondenti.

-- Combine all employees and departments
SELECT employees.employee_id, employees.employee_name, departments.department_name, employees.salary
FROM employees
FULL JOIN departments
ON employees.department_id = departments.department_id;

Esempio di tabella unita con SQL Full outer join.

Esempio di tabella unita con SQL Full outer join. Immagine dell'autore.

INNER JOIN vs. OUTER JOIN: differenze principali

INNER JOIN e OUTER JOIN differiscono in modo fondamentale nel modo in cui gestiscono le righe non corrispondenti durante l'unione delle tabelle. Capire queste differenze è importante per scegliere il tipo di join giusto nelle query al database. Confrontiamo queste differenze.

Cosa restituisce INNER JOIN

INNER JOIN restituisce solo le righe con valori corrispondenti in entrambe le tabelle. Questo tipo di join si usa quando hai bisogno di dati presenti in entrambi i dataset.

La query seguente recupera record da employees con righe corrispondenti dalla tabella departments.

-- Example: Get employees with matching departments
SELECT employees.employee_id, employees.employee_name, departments.department_name
FROM employees
INNER JOIN departments
-- Returns only employees assigned to a department
ON employees.department_id = departments.department_id;

Esempio di tabella unita con SQL Inner join.

Esempio di tabella unita con SQL INNER JOIN. Immagine dell'autore.

Cosa restituisce OUTER JOIN

OUTER JOIN include le righe non corrispondenti da una o entrambe le tabelle, a seconda del tipo di OUTER JOIN. Ad esempio, il LEFT OUTER JOIN restituisce tutte le righe della tabella di sinistra e le righe corrispondenti della tabella di destra. Le righe non corrispondenti della tabella di destra avranno valori NULL.

La query seguente recupera i record dei dipendenti, inclusi quelli senza reparto.

-- Get all employees, even those without a department
SELECT employees.employee_id, employees.employee_name, departments.department_name
FROM employees
LEFT JOIN departments
ON employees.department_id = departments.department_id;

Esempio di dati recuperati con SQL Left outer join.

Esempio di dati recuperati con SQL LEFT OUTER JOIN. Immagine dell'autore.

Quando usare SQL INNER JOIN e OUTER JOIN

INNER JOIN e OUTER JOIN differiscono anche nei casi d'uso pratici per il recupero dei dati.

Quando usare INNER JOIN

INNER JOIN è più efficace quando ti servono solo i dati di intersezione tra due tabelle. Ad esempio, puoi usare INNER JOIN quando analizzi i dati di vendita per trovare i prodotti che sono stati venduti, ovvero quando sia la tabella dei prodotti sia quella delle vendite hanno voci corrispondenti.

Quando usare OUTER JOIN

OUTER JOIN è indicato quando devi restituire un dataset completo, includendo le righe non corrispondenti. Ad esempio, quando generi un report per mostrare tutti i dipendenti, inclusi quelli senza assegnazione a un reparto, o tutti i reparti, inclusi quelli senza dipendenti.

Conclusione

Comprendere la differenza tra INNER JOIN e OUTER JOIN è importante per scrivere query efficienti. Imparare queste tecniche aiuta anche a migliorare l'ottimizzazione delle query per un recupero dei dati più rapido. Ti incoraggio a continuare a fare pratica per sviluppare altre competenze di gestione dei database.

Ti consiglio di provare il nostro percorso professionale Associate Data Analyst in SQL per diventare un buon data analyst. Il nostro corso Reporting in SQL ti aiuterà anche a diventare abile nella creazione di report e dashboard complessi per un'efficace presentazione dei dati. Se ti stai preparando per un colloquio in cui dovrai mostrare le tue competenze SQL, ti consiglio di consultare il nostro blog, 20 Top SQL Joins Interview Questions, per aiutarti a prepararti.


Allan Ouko's photo
Author
Allan Ouko
LinkedIn
Technical writer di Data Science con esperienza pratica in data analytics, business intelligence e data science. Scrivo contenuti pratici e orientati al settore su SQL, Python, Power BI, Databricks e data engineering, basati su lavoro di analytics reale. La mia scrittura unisce profondità tecnica e impatto sul business, aiutando i professionisti a trasformare i dati in decisioni sicure.

SQL INNER JOIN e OUTER JOIN: domande frequenti

Qual è la differenza tra INNER JOIN e OUTER JOIN in SQL?

INNER JOIN restituisce solo le righe corrispondenti di entrambe le tabelle, mentre OUTER JOIN include anche le righe non corrispondenti, con NULL a colmare le lacune quando non si trovano dati corrispondenti.

Quando dovrei usare un INNER JOIN in SQL?

Usa un INNER JOIN quando devi recuperare solo le righe con valori corrispondenti in entrambe le tabelle.

Quali sono i tipi di OUTER JOIN in SQL?

I tipi di OUTER JOIN sono LEFT OUTER JOIN, RIGHT OUTER JOIN e FULL OUTER JOIN.

Come funziona un LEFT OUTER JOIN in SQL?

Un left outer join restituisce tutte le righe della tabella di sinistra, le righe corrispondenti della tabella di destra e le righe non corrispondenti della sinistra.

Che cos'è un FULL OUTER JOIN in SQL?

Un FULL OUTER JOIN restituisce tutte le righe di entrambe le tabelle, incluse quelle non corrispondenti di ciascuna.

Argomenti

Impara SQL con DataCamp

Corso

Manipolazione dei dati in SQL

4 h
323.5K
Vedi dettagliRight Arrow
Inizia il corso
Mostra altroRight Arrow
Correlato

blog

Che cos'è Snowflake? Guida per principianti alla piattaforma dati cloud

Esplora le basi di Snowflake, la piattaforma dati cloud. Scopri la sua architettura, le sue funzionalità e come integrarla nelle tue pipeline di dati.
Tim Lu's photo

Tim Lu

12 min

blog

I 15 migliori server MCP remoti che ogni AI builder dovrebbe conoscere nel 2026

Scopri i 15 migliori server MCP remoti che stanno trasformando lo sviluppo AI nel 2026. Scopri come migliorano automazione, ragionamento, sicurezza e velocità dei workflow.
Abid Ali Awan's photo

Abid Ali Awan

15 min

blog

Tokenizzazione nel NLP: come funziona, sfide e casi d'uso

Guida al preprocessing NLP nel machine learning. Copriamo spaCy, i transformer di Hugging Face e come funziona la tokenizzazione in casi d'uso reali.
Abid Ali Awan's photo

Abid Ali Awan

10 min

Mostra altroMostra altro