Os comandos JOIN no SQL são fundamentais para combinar e relacionar dados entre múltiplas tabelas em um banco de dados relacional. Cada tipo de JOIN – INNER JOIN, LEFT JOIN, RIGHT JOIN, FULL JOIN e CROSS JOIN – possui uma função específica, permitindo extrair informações detalhadas e relevantes para análises e aplicações. Neste guia completo, você entenderá como cada JOIN funciona, verá exemplos práticos e aprenderá a aplicar essas operações de maneira eficiente para resolver problemas comuns em SQL. Quer seja para otimizar relatórios, consolidar dados ou simplificar consultas, dominar os JOINs é essencial para qualquer desenvolvedor ou analista de dados. Vamos explorar cada tipo de JOIN e ver como eles podem transformar a forma como você consulta seus dados.
Para exemplo vamos tomar estas duas tabelas (Tabela A e Tabela B):
Usando ambas as tabelas em todos os exemplos, vamos ilustrar os tipos mais comuns de join.
Aposte na Mega da Virada 2024!
Prepare-se para uma chance única de mudar sua vida. O prêmio histórico de R$ 600 milhões da Mega da Virada 2024 está esperando por você!
Além disso, conheça os bolões da Sorte Online, que são os mais premiados e oferecem as melhores chances de ganhar! Ao participar dos bolões, você se junta a centenas de apostadores e aumenta suas chances de faturar uma bolada.
Faça sua Aposta AgoraInner Join
INNER JOIN é uma cláusula que permite a junção entre duas ou mais tabelas, desde que hajam entrelaçamento entre todas. INNER JOIN é uma cláusula que permite a junção entre duas ou mais tabelas, desde que hajam entrelaçamento entre todas.
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: De forma visual temos como o Inner Join:
Quando usar JOIN e Inner JOIN?
Diferença entre INNER JOIN e LEFT JOIN
Enquanto o INNER JOIN combina todos os valores das duas tabelas e retorna no resultado somente as linhas presentes em ambas, o LEFT JOIN traz todas as linhas presentes na tabela 1 (ou tabela da esquerda) com os valores correspondentes da tabela 2.
VAI GOSTAR:
Left Join
Use a operação LEFT JOIN para criar uma junção externa esquerda. As junções externas esquerdas incluem todos os registros da primeira de duas tabelas (a da esquerda), mesmo se não houver valores correspondentes na segunda tabela (à direita). Use uma operação RIGHT JOIN para criar uma junção externa direita.
LEIA TAMBÉM: 21 comandos SQL essenciais para programadores e BI
LIVROS SQL E BANCO DE DADOS RECOMENDADOS:
1. SQL para Análise de Dados: Técnicas avançadas para transformar dados em insights
Diferença entre INNER JOIN e LEFT JOIN
Enquanto o INNER JOIN combina todos os valores das duas tabelas e retorna no resultado somente as linhas presentes em ambas, o LEFT JOIN traz todas as linhas presentes na tabela 1 (ou tabela da esquerda) com os valores correspondentes da tabela 2.
Exemplo de 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:
De forma visual temos:
INNER JOIN : Retorna registros que possuem valores correspondentes nas duas tabelas; LEFT JOIN: Retorna todos os registros da tabela esquerda e os registros correspondentes da tabela direita; RIGHT JOIN: Retorna todos os registros da tabela da direita e os registros correspondentes da tabela da esquerda.
Outro exemplo:
Você quer listar todos os clientes, incluindo aqueles que ainda não fizeram pedidos.
Explicação: Esse LEFT JOIN retorna todos os clientes. Para clientes que não têm pedidos, a coluna PedidoID
será NULL
.
Right Join
Retorna todos os registros da tabela direita e os registros correspondentes da tabela esquerda. A RIGHT JOIN combina dados de duas ou mais tabelas. A RIGHT JOIN começa a selecionar dados da tabela “direita” B e a corresponder às linhas da tabela “esquerda” A.
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:
Full Outer Join
Por exemplo, isso nos permite ver cada funcionário que está em um departamento e cada departamento que tem um funcionário, mas também ver cada funcionário que não faz parte de um departamento e cada departamento que não tem um funcionário.
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:
Basicamente, Clientes INNER JOIN Pedidos retorna apenas clientes que tenham feito pedidos. Clientes OUTER JOIN Pedidos retorna clientes sem pedidos (as colunas de Pedidos estarão com NULL) e, se a integridade referencial não for imposta, pedidos sem clientes.
Cross Join
A cláusula CROSS JOIN retorna todas as linhas das tabelas por cruzamento, ou seja, para cada linha da tabela esquerda queremos todos os linhas da tabelas direita ou vice-versa. Ele também é chamado de produto cartesiano entre duas tabelas.
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:
Uma tabela comparativa
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 null também.
Leia também:
VIEWS em SQL: Vantagens e desvantagens
Android SDK Manager via linhas de comando
NOVOS CONTEÚDOS