· Andrea Pollini · basi dati · 2 min read
Quali sono le differenze tra "INNER JOIN" e "OUTER JOIN"
La differenza tra INNER JOIN e OUTER JOIN è uno dei concetti fondamentali della progettazione di database relazionali. In questo articolo, esaminiamo le differenze tra INNER JOIN e OUTER JOIN e quando è opportuno utilizzare ciascuno di essi.

INNER JOIN e OUTER JOIN sono due tipi di join utilizzati in SQL per combinare dati da due o più tabelle. La differenza principale tra di loro sta nel modo in cui gestiscono i dati che non coincidono tra le tabelle.
INNER JOIN:
- Restituisce solo le righe in cui c’è un record corrispondente in entrambe le tabelle.
- Pensa all’intersezione di due insiemi di dati. Mantiene solo i punti dati comuni.
Esempio:
Supponiamo di avere due tabelle: Clienti
e Ordini
. La tabella Clienti
contiene informazioni sui clienti, mentre la tabella Ordini
contiene informazioni sugli ordini effettuati dai clienti.
SELECT *FROM ClientiINNER JOIN OrdiniON Clienti.IDCliente = Ordini.IDCliente;
Questa query restituirà solo le righe della tabella Clienti
per cui esiste un ordine corrispondente nella tabella Ordini
. In altre parole, mostrerà solo i clienti che hanno effettuato almeno un ordine.
OUTER JOIN:
Restituisce tutti i record da una tabella (solitamente la sinistra) e li abbina all’altra tabella.
I dati mancanti nelle righe non abbinate vengono riempiti con valori nulli.
Esistono tre tipi di OUTER JOIN a seconda della tabella di cui si desidera mantenere tutti i record:
- LEFT OUTER JOIN: Mantiene tutti i record dalla tabella di sinistra e li abbina alla tabella di destra.
- RIGHT OUTER JOIN: Mantiene tutti i record dalla tabella di destra e li abbina alla tabella di sinistra.
- FULL OUTER JOIN: Mantiene tutti i record da entrambe le tabelle e li combina in base ai criteri di corrispondenza.
Esempio:
SELECT *FROM ClientiLEFT OUTER JOIN OrdiniON Clienti.IDCliente = Ordini.IDCliente;
Questa query restituirà tutti i record dalla tabella Clienti
, anche se non hanno un ordine corrispondente nella tabella Ordini
. Le righe senza un ordine corrispondente nella tabella Ordini
avranno valori nulli per le colonne della tabella Ordini
.
Riepilogo:
Funzionalità | INNER JOIN | OUTER JOIN |
---|---|---|
Corrispondenza dati | Entrambe le tabelle | Una tabella (solitamente sinistra) |
Dati non coincidenti | Scartati | Riempiti con valori nulli |
Risultato | Intersezione | Unione (con valori nulli) |
INNER JOIN è utile quando si desiderano solo i dati che coincidono in entrambe le tabelle. OUTER JOIN è utile quando si desiderano tutti i dati da una tabella, anche se non hanno un corrispondenza nell’altra tabella.