Como se encaixam também "LEFT JOIN", "RIGHT JOIN" e "FULL JOIN"?
Assumindo que você está se unindo em colunas sem duplicatas, o que é um caso muito comum:
Uma união interna de A e B dá o resultado de A interseção B, ou seja, a parte interna de uma diagrama Venn intersecção.
Uma união externa de A e B dá os resultados da união A B, ou seja, as partes externas de uma união em diagrama Venn.
**Exemplos***
Suponha que você tem duas tabelas, com uma única coluna cada, e os dados são os seguintes:
A B
- -
1 3
2 4
3 5
4 6
Note que (1,2) são exclusivos de A, (3,4) são comuns, e (5,6) são exclusivos de B.
**Ingressar no Inner***
Uma união interna usando uma das consultas equivalentes dá a intersecção das duas tabelas, ou seja, as duas filas que têm em comum.
select * from a INNER JOIN b on a.a = b.b;
select a.*, b.* from a,b where a.a = b.b;
a | b
--+--
3 | 3
4 | 4
**Junta externa esquerda***
Uma união externa esquerda dará todas as linhas em A, mais qualquer linha comum em B.
select * from a LEFT OUTER JOIN b on a.a = b.b;
select a.*, b.* from a,b where a.a = b.b(+);
a | b
--+-----
1 | null
2 | null
3 | 3
4 | 4
*Junta externa direita***
Uma união externa direita dará todas as filas em B, mais qualquer fila comum em A.
select * from a RIGHT OUTER JOIN b on a.a = b.b;
select a.*, b.* from a,b where a.a(+) = b.b;
a | b
-----+----
3 | 3
4 | 4
null | 5
null | 6
*Junta externa completa***
Uma união externa completa lhe dará a união de A e B, ou seja, todas as linhas em A e todas as linhas em B. Se algo em A não tem um dado correspondente em B, então a porção B é nula, e vice versa.
select * from a FULL OUTER JOIN b on a.a = b.b;
a | b
-----+-----
1 | null
2 | null
3 | 3
4 | 4
null | 6
null | 5
Uma união interna só mostra filas se houver um registro correspondente no outro lado (direito) da união.
Uma união externa (esquerda) mostra linhas para cada registro no lado esquerdo, mesmo que não haja linhas correspondentes no outro lado (direito) da união. Se não houver linhas correspondentes, as colunas para o outro lado (direito) mostrariam NULLs.
As adesões internas requerem que exista um registro com uma identificação relacionada na mesa unida.
As uniões externas retornarão registros para o lado esquerdo, mesmo que nada exista para o lado direito.
Por exemplo, você tem uma tabela de Ordens e uma tabela de Detalhes da Ordem. Eles são relacionados por um "OrderID".
**Encomendas***
**OrdemDetalhes***
O pedido
SELECT Orders.OrderID, Orders.CustomerName
FROM Orders
INNER JOIN OrderDetails
ON Orders.OrderID = OrderDetails.OrderID
só devolverá Ordens que também tenham algo na tabela OrderDetails.
Se você mudar para OUTER LEFT JOIN
SELECT Orders.OrderID, Orders.CustomerName
FROM Orders
LEFT JOIN OrderDetails
ON Orders.OrderID = OrderDetails.OrderID
então ele retornará registros da tabela de Ordens mesmo que não tenham registros de Detalhes de Ordem.
Você pode usar isto para encontrar Ordens que não têm nenhum OrderDetails indicando uma possível ordem órfã, adicionando uma cláusula como WHERE OrderDetails.OrderID IS NULL
.