Explicação sobre Inner, Left, Right, Outer/Full e Cross Join

Uma breve explicação sobre Inner, Left, Right, Outer/Full e Cross Join

Vamos tomar por base estas duas tabelas:

TabelaA e TabelaB

Usando ambas em todos os exemplos, vamos ilustrar os tipos mais comuns de join.

 

Inner Join

Gráfico Inner Join

Esse é um formato comum de join, que retorna dados apenas quando as duas tabelas tem chaves correspondentes na cláusula ON do join.

Query:

SELECT TabelaA.*, TabelaB.* FROM TabelaA INNER JOIN TabelaB ON TabelaA.Chave = TabelaB.Chave

Resultado:

Inner Join

 

Left Join

Gráfico Left Join

É um dos formatos mais usados de join, que retorna a Tabela A inteira e apenas os registros que coincidirem com a igualdade do join na TabelaB (ou campos nulos para os campos sem correspondência).

Query:

SELECT TabelaA.*, TabelaB.* FROM TabelaA LEFT JOIN TabelaB ON TabelaA.Chave = TabelaB.Chave

Resultado:

Left Join

 

Right Join

Gráfico Right Join

Segue o mesmo raciocínio do Left Join, mas se aplicando à tabela B em vez da A:

Query:

SELECT TabelaA.*, TabelaB.* FROM TabelaA RIGHT JOIN TabelaB ON TabelaA.Chave = TabelaB.Chave

Resultado:

Right Join

 

Full Outer Join

Gráfico Full Outer Join

Conhecida como OUTER JOIN ou simplesmente FULL JOIN, este retorna todos os registros de ambas as tabelas.

Query:

SELECT TabelaA.*, TabelaB.* FROM TabelaA FULL OUTER JOIN TabelaB ON TabelaA.Chave = TabelaB.Chave

Resultado:

Full/Outer Join

 

Cross Join

Gráfico Cross Join

Basicamente é o produto cartesiano entre as duas tabelas. Para cada linha de TabelaA, são retornadas todas as linhas de TabelaB.

É mais fácil entender o Cross Join como um “Join sem cláusula ON”, ou seja, todas as combinações de linhas de A e B são devolvidas.

Inclusive, se você fizer um Cross Join com cláusla ON, ele “vira” um mero Inner Join.

Query:

SELECT TabelaA.*, TabelaB.* FROM TabelaA CROSS JOIN TabelaB 

Ou ainda:

SELECT TabelaA.*, TabelaB.* FROM TabelaA, TabelaB 

Resultado:

Cross Join

 

Considerações

Notar que todos os campos pedidos no select sempre retornam (desde que existam na tabela, obviamente), independente de existirem para aquela linha específica.

O que acontece no caso de uma linha ser retornada para apenas uma das tabelas é que os campos da outra vêm com conteúdo null.

Usualmente, caso você precise diferenciar um nulo que realmente exista na tabela de um nulo por falta de correspondência, basta ver se os campos usados na condição do ON não retornaram nulltambém.

www.revanger.com www.erguvanhaber.com www.erzurumozelders.com www.tekirdagtabldot.com www.gebzesaadet.com www.balikesiryenihaber.com www.ucanbalonmugla.com www.aymaras.com www.buyukorduhaber.com www.ambushm.com www.trabzonpostasi.com www.yalovaradyotv.com www.internetedirne.com www.duzcepark.com www.butuncanakkale.com www.ssgolfhotel.com www.ispartaradyonet.com www.tokathaberi.com www.tokathabersitesi.com www.escortlarrize.net www.sivashbr.net www.sivashaberci.com www.manisaotolastik.com www.yeniyasamgorukle.com www.alanyamado.com www.manavgatx.com