C’è una differenza tra INNER JOIN ed OUTER JOIN? In questo articolo vediamo qual è e come è correlata agli altri tipi di JOIN nei database.
Ciao mi chiamo Lorenzo Neri e sono un informatico: realizzo contenuti per aiutare le persone a padroneggiare l’arte del nuovo millennio, ovvero l’informatica!
Partiamo da un presupposto molto semplice e poco tecnichese.
Come funzionano la INNER JOIN e la OUTER JOIN
La INNER JOIN si basa su questo principio: abbiamo due tabelle, A e B. Hai presente i diagrammi di Venn?

Benissimo. La tabella A è il cerchio blu, la tabella B è il cerchio rosso.
Ognuna delle due contiene delle righe, ci siamo fino a qui?
Ottimo, la vedi la parte che interseca entrambi i cerchi? Quella dove troviamo “A^B”?
Quella intersezione è il risultato della INNER JOIN.
Parliamo un attimo della OUTER JOIN.
Stando a quel grafico, se l’intersezione è il risultato della INNER JOIN, le parti esterne dei due cerchi, quelle che sono al di fuori dell’intersezione per intenderci sono ciò di cui stiamo parlando.
Le parti al di fuori dell’intersezione sono il risultato della OUTER JOIN.
Ora che abbiamo capito la differenza principale fra INNTER JOIN ed OUTER JOIN, facciamo un esempio completo.
Due tabelle numeriche
Ci troviamo le due tabelle: A e B.
A B
1 3
2 4
3 5
4 6
Sono composte da una sola colonna e il contenuto è puramente numerico.
Il risultato della INNER JOIN
Se eseguiamo la query su quelle due tabelle e per intenderci sarebbe qualcosa come:
SELECT * FROM A INNER JOIN B ON A.A = B.B;
//Oppure in forma compatta
SELECT A.*, B.* FROM A, B WHERE A.A = B.B;
Il risultato sarebbe questo:
A B
3 3
4 4
Sostanzialmente come abbiamo visto prima sono i valori presenti nell’intersezione che abbiamo visto prima. In parole meno lunghe, i valori che hanno in comune le due tabelle!
Ora, vediamo cosa succede con la OUTER JOIN
OUTER JOIN all’esempio, ma divisa
Ho detto ad inizio articolo che ci sono altri tipi di JOIN, perciò la differenza fra INNER ed OUTER JOIN va ben oltre quello che abbiamo visto fino ad ora, ma ci arriviamo.
FULL OUTER JOIN
Questo, è il nome completo della OUTER JOIN che abbiamo visto fino ad ora e ci arriviamo tra poco sul perché si chiami così.
Per eseguirla, dobbiamo scrivere ciò:
SELECT * FROM A FULL OUTER JOIN B ON A.A = B.B;
Il risultato basato sulle tabelle di prima, sarebbe questo:
A B
1 null
2 null
3 3
4 4
null 6
null 5
In parole molto semplici, otteniamo le parti esterne del diagramma, ma capiamo perché ci sono tutti quei valori “null”.
In sintesi, se una riga di A NON ha corrispondenza con una riga di B e viceversa, viene completata in automatico l’unione delle due tabelle con il valore mancante, appunto “null”.
Parliamo delle altre OUTER JOIN
Il perché ci siano vari tipi di OUTER JOIN è presto detto.
Prendiamo sì le parti esterne del diagramma e, nel caso di prima le prendiamo per intero, qua invece, andiamo in base al lato preso come riferimento.
1. LEFT OUTER JOIN
Questa OUTER JOIN prende in considerazione le righe della tabella posta a sinistra o comunque come primo argomento della JOIN, per poi aggiungere le righe in comune di B.
Riferendoci al diagramma, prendiamo come riferimento la parte esterna di A e, se troviamo qualcosa in comune consideriamo a seguito B.
Questo con una query, si traduce in
SELECT * FROM A LEFT OUTER JOIN B ON A.A = B.B;
//Compatta
SELECT A.*, B.* FROM A, B WHERE A.A = B.B (+);
E il risultato:
A B
3 4
4 4
null 5
null 6
Viene da se che per automatismo nella tua informaticoa ce ne sia già un’altra 🙂
2. RIGHT OUTER JOIN
È tale e quale a quanto abbiamo visto, ma anziché la prima tabella, si prenderà come riferimento base la seconda!
E di fatto:
SELECT * FROM A RIGHT OUTER JOIN B ON A.A = B.B;
//Compatta
SELECT A.*, B.* FROM A, B WHERE A.A(+) = B.B;
Con risultato finale:
A B
3 3
4 4
null 5
null 6