← Torna al blog Database · 7 min di lettura

Le JOIN in SQL spiegate con esempi

📅 6 giugno 2026 — di Alessandro Simone

Quando i dati sono divisi in più tabelle, le JOIN sono lo strumento SQL che ci permette di rimetterli insieme. Sono uno degli argomenti più importanti (e temuti) dei database. In questa guida le spieghiamo con calma, partendo da un esempio concreto, così che INNER, LEFT e RIGHT JOIN non abbiano più segreti.

Perché servono le JOIN?

In un database ben progettato, le informazioni sono divise in tabelle separate per evitare ripetizioni. Ad esempio, gli studenti in una tabella e i corsi in un'altra. Ma quando vogliamo sapere "a quale corso è iscritto ogni studente", dobbiamo collegare le due tabelle: è qui che entrano in gioco le JOIN.

Le nostre tabelle di esempio

Immaginiamo due tabelle. La tabella studenti ha le colonne id, nome e id_corso. La tabella corsi ha id e descrizione. Il campo id_corso dello studente fa da "ponte": è una chiave esterna che punta all'id del corso.

INNER JOIN: solo le corrispondenze

La INNER JOIN (o semplicemente JOIN) restituisce solo le righe che hanno una corrispondenza in entrambe le tabelle:

SELECT studenti.nome, corsi.descrizione
FROM studenti
INNER JOIN corsi ON studenti.id_corso = corsi.id;

La parte chiave è ON, che indica la condizione di collegamento: "unisci le righe dove l'id_corso dello studente è uguale all'id del corso". Il risultato mostra ogni studente accanto al suo corso. Se uno studente non ha un corso (id_corso vuoto), con la INNER JOIN non comparirà.

LEFT JOIN: tutti quelli di sinistra

La LEFT JOIN restituisce tutte le righe della tabella di sinistra (la prima), anche quelle senza corrispondenza nella tabella di destra:

SELECT studenti.nome, corsi.descrizione
FROM studenti
LEFT JOIN corsi ON studenti.id_corso = corsi.id;

Con questa query vediamo tutti gli studenti, compresi quelli non ancora iscritti a nessun corso: per loro, la colonna descrizione sarà vuota (NULL). È utilissima quando vuoi essere sicuro di non perdere nessun elemento della tabella principale.

RIGHT JOIN: tutti quelli di destra

La RIGHT JOIN è l'opposto: restituisce tutte le righe della tabella di destra, anche se non hanno corrispondenze a sinistra:

SELECT studenti.nome, corsi.descrizione
FROM studenti
RIGHT JOIN corsi ON studenti.id_corso = corsi.id;

Qui vedremo tutti i corsi, compresi quelli senza studenti iscritti. Nella pratica la RIGHT JOIN si usa meno della LEFT, perché spesso basta invertire l'ordine delle tabelle.

Una metafora per ricordarle

Immagina due cerchi che si sovrappongono (i diagrammi di Venn):

Questa immagine mentale è il modo più efficace per non confonderle mai più.

Usare gli alias per scrivere meno

Per rendere le query più leggibili, si usano gli alias, cioè soprannomi brevi per le tabelle:

SELECT s.nome, c.descrizione
FROM studenti s
JOIN corsi c ON s.id_corso = c.id;

Qui s sta per studenti e c per corsi. Con tabelle dai nomi lunghi, gli alias fanno risparmiare tanto tempo.

In sintesi

Le JOIN collegano tabelle diverse tramite una condizione ON. La INNER JOIN mostra solo le corrispondenze, la LEFT JOIN tutte le righe di sinistra e la RIGHT JOIN tutte quelle di destra. Pensa ai diagrammi di Venn e ricordati degli alias: con un po' di pratica, le JOIN diventeranno il tuo strumento preferito per interrogare i database.

Allenati con le JOIN

Nella sezione esercizi trovi query con JOIN da risolvere, con soluzioni passo passo.

Vai ai corsi →