Junções (JOINS) no SQL Server: Tipos com exemplos

⚡ Resumo Inteligente

Em SQL Server, as junções (JOINs) combinam linhas de duas ou mais tabelas com base em uma coluna relacionada, usando junções INNER, LEFT OUTER, RIGHT OUTER e FULL OUTER para controlar quais linhas correspondentes e não correspondentes aparecem no resultado.

  • 🔗 Objetivo: Uma operação JOIN recupera dados relacionados de duas ou mais tabelas, encontrando uma correspondência em uma coluna comum, geralmente uma chave.
  • 🎯 JUNÇÃO INTERNA: A operação INNER JOIN retorna apenas as linhas em que a condição de junção é verdadeira em ambas as tabelas.
  • ⬅️ JUNÇÃO EXTERNA ESQUERDA: LEFT OUTER JOIN retorna todas as linhas da tabela da esquerda, preenchendo as colunas não correspondentes da tabela da direita com NULL.
  • ➡️ JUNÇÃO EXTERNA DIREITA: RIGHT OUTER JOIN retorna todas as linhas da tabela da direita, preenchendo as colunas não correspondentes da tabela da esquerda com NULL.
  • 🔄 JUNÇÃO EXTERNA COMPLETA: FULL OUTER JOIN retorna todas as linhas de ambas as tabelas, usando NULL sempre que a condição não for atendida.
  • 🔑 SOB condição: A cláusula ON especifica as colunas que ligam as tabelas, geralmente um par de chave primária e chave estrangeira.

Junções no SQL Server: exemplos de INNER JOIN, LEFT JOIN, RIGHT JOIN e FULL OUTER JOIN.

O que são junções (joins) no SQL Server?

É possível recuperar dados de mais de uma tabela usando a instrução JOIN em SQL ServerUma operação JOIN combina linhas de duas ou mais tabelas com base em uma coluna relacionada entre elas, geralmente uma coluna. chave primária combinado com um chave estrangeiraExistem principalmente quatro tipos de JOINs no SQL Server:

  • JUNÇÃO INTERNA / junção simples
  • JUNÇÃO EXTERNA À ESQUERDA / JUNÇÃO À ESQUERDA
  • JUNÇÃO EXTERNA DIREITA / JUNÇÃO DIREITA
  • JUNÇÃO EXTERNA COMPLETA

A tabela abaixo resume quais linhas cada tipo de JOIN retorna:

Tipo de junção Linhas retornadas
INNER JOIN Somente as linhas em que a condição de junção coincide em ambas as tabelas.
JUNÇÃO EXTERNA ESQUERDA Todas as linhas da tabela da esquerda, mais as linhas correspondentes da tabela da direita (valores NULL onde não houver correspondência).
DIREITO OUTER JOIN Todas as linhas da tabela da direita, mais as linhas correspondentes da tabela da esquerda (valores NULL onde não houver correspondência).
JUNÇÃO EXTERNA COMPLETA Todas as linhas de ambas as tabelas, com valores NULL sempre que a condição não for atendida.

Os exemplos abaixo usam dois tabelasAlunos e taxas, unidos pela coluna de admissão em comum. Cada seção explica um tipo de JOIN com sua sintaxe, uma consulta aplicada e o resultado.

INNER JOIN

Este tipo de SQL Server A função JOIN retorna linhas de todas as tabelas em que a condição de junção é verdadeira. Sua sintaxe é a seguinte:

SELECT columns
FROM table_1 
INNER JOIN table_2
ON table_1.column = table_2.column;

Usaremos as duas tabelas a seguir para demonstrar isso. A tabela Alunos abaixo lista cada aluno e seu número de matrícula:

Tabela de alunos listando as colunas de admissão, nome e sobrenome.

A tabela de taxas abaixo registra o valor pago por cada número de admissão:

Tabela de taxas listando os números de admissão e a coluna de valor pago.

O comando a seguir demonstra um INNER JOIN no SQL Server com um exemplo:

SELECT Students.admission, Students.firstName, Students.lastName, Fee.amount_paid
FROM Students
INNER JOIN Fee
ON Students.admission = Fee.admission

O comando retorna o seguinte resultado, mostrando apenas os números de admissão presentes em ambas as tabelas:

O resultado do INNER JOIN mostra apenas os alunos cuja admissão consta em ambas as tabelas.

Podemos identificar quais alunos pagaram a taxa. Utilizamos a coluna com valores em comum nas duas tabelas, que é a coluna de admissão.

JUNÇÃO EXTERNA ESQUERDA

Esse tipo de junção retorna todas as linhas da tabela da esquerda mais os registros da tabela da direita que possuem valores correspondentes. Por exemplo:

SELECT Students.admission, Students.firstName, Students.lastName, Fee.amount_paid
FROM Students
LEFT OUTER JOIN Fee
ON Students.admission = Fee.admission

O código retorna o seguinte resultado, keeping todos os alunos, mesmo quando não houver registro de pagamento correspondente:

RESULTADO DE JUNÇÃO EXTERNA ESQUERDA KEEping Cada linha de alunos com NULL para taxas não correspondentes

Os registros sem valores correspondentes são substituídos por NULLs nas respectivas colunas.

DIREITO OUTER JOIN

Este tipo de junção retorna todas as linhas da tabela da direita e apenas aquelas com valores correspondentes na tabela da esquerda. Por exemplo:

SELECT Students.admission, Students.firstName, Students.lastName, Fee.amount_paid
FROM Students
RIGHT OUTER JOIN Fee
ON Students.admission = Fee.admission

A instrução OUTER JOIN no SQL Server retorna o seguinte resultado:

RESULTADO DE JUNÇÃO EXTERNA DIREITA keeping cada linha de Taxas e linhas correspondentes de Alunos

A razão para a saída acima é que todas as linhas da tabela Taxas estão disponíveis na tabela Alunos quando correspondidas na coluna admissão.

JUNÇÃO EXTERNA COMPLETA

Esse tipo de junção retorna todas as linhas de ambas as tabelas, com valores NULL sempre que a condição de junção não for verdadeira. Por exemplo:

SELECT Students.admission, Students.firstName, Students.lastName, Fee.amount_paid
FROM Students
FULL OUTER JOIN Fee
ON Students.admission = Fee.admission

O código retorna o seguinte resultado para consultas FULL OUTER JOIN em SQL, combinando todas as linhas de ambas as tabelas:

Resultado da junção externa completa combinando todas as linhas de Alunos e Taxas com valores NULL para as lacunas.

Perguntas Frequentes

A operação CROSS JOIN retorna o produto cartesiano de duas tabelas, combinando cada linha da primeira tabela com cada linha da segunda. Ela não possui condição ON, portanto, uma tabela com 10 linhas e outra com 5 linhas resultam em 50 linhas.

Você usa um SELF JOIN: a tabela é listada duas vezes com aliases diferentes e, em seguida, unida por uma coluna relacionada para comparar linhas dentro da mesma tabela. Isso é comum para dados hierárquicos, como associar cada funcionário ao seu gerente.

Uma operação JOIN combina colunas de tabelas relacionadas lado a lado, combinando linhas de acordo com uma condição. Uma operação UNION empilha verticalmente os resultados de duas consultas SELECT, adicionando linhas. JOIN amplia o resultado; UNION o alonga.

Sim. A cláusula ON pode testar várias colunas unidas com AND, por exemplo, ON a.col1 = b.col1 AND a.col2 = b.col2. Condições compostas são comuns quando uma única coluna não identifica uma linha de forma exclusiva.

A cláusula ON define como as tabelas são comparadas e é aplicada durante a execução da junção. A cláusula WHERE filtra o resultado combinado posteriormente. Com junções externas (OUTER JOINs), mover uma condição entre elas pode alterar as linhas retornadas.

Sim. Escrever JOIN sem um prefixo resulta em INNER JOIN, portanto, retorna apenas as linhas correspondentes. Adicionar LEFT, RIGHT ou FULL antes de OUTER JOIN altera quais linhas não correspondentes são mantidas no resultado.

Sim. Travas deslizantes portáteis Copiloto do GitHub É possível elaborar consultas INNER, LEFT, RIGHT e FULL OUTER JOIN a partir de um prompt em linguagem natural. Sempre revise a condição ON e o tipo de junção para garantir que o conjunto de resultados corresponda ao que você pretendia.

Assistentes de IA e aprendizado de máquina sugerem o tipo de junção correto, geram condições ON para múltiplas tabelas e sinalizam chaves ausentes ou produtos cartesianos acidentais. Eles também podem recomendar índices para colunas de junção. O desenvolvedor verifica cada sugestão antes de executá-la.

Resuma esta postagem com: