Voltar para a lista de artigos Artigos
5 minutos de leitura

Um Guia Ilustrado para o SQL INNER JOIN

O que é um SQL INNER JOIN, e como funciona? Vamos descobrir!

Em meu último artigo, eu discuti o Operação CROSS JOIN em SQL. Hoje, veremos INNER JOIN e como utilizá-lo. É o mesmo que um JOIN? Quantas tabelas você pode vincular com um INNER JOIN?

Todas estas são boas perguntas. Vejamos as respostas!

O que é um INNER JOIN?

INNER JOIN combina dados de várias tabelas, unindo-as com base em um registro correspondente. Este tipo de junção requer uma condição de união, que explicaremos dentro de momentos.

Para ilustrar como funciona INNER JOIN, usaremos algumas tabelas simples. Duas delas, color e shoes são mostrados abaixo:

color

id name
1 yellow
2 green
3 pink

shoes

id size color_id
1 seven 2
2 eight 2
3 nine 2
4 seven 1
5 nine 1
6 seven 3
7 ten NULL

O color tabela armazena um número de identificação e um nome para cada cor. O shoes tabela armazena um número de identificação para cada par de sapatos, o tamanho do sapato, e um número de identificação que se refere a uma cor na tabela color mesa.

Como funciona o INNER JOIN

Neste exemplo, INNER JOIN junta-se aos registros da shoes tabela com os registros do color tabela através da coluna color_id da shoes mesa. Os valores nesta coluna são os mesmos que os da coluna id da color de forma que produz o conjunto de resultados pretendido. Dê uma olhada na consulta a seguir:

SELECT *  FROM  shoes
INNER JOIN color  ON color.id = shoes.color_id;

A declaração SELECT retira todos os registros da tabela listada após a cláusula FROM - neste caso, o shoes mesa. Depois há um INNER JOIN com o nome da tabela com a qual queremos comparar registros (ou seja, a color tabela). O predicado ON indica a condição de correspondência, que os registros de ambas as tabelas devem ter. Aqui a condição é que o campo id do color tabela e o campo color_id do shoes A tabela deve ter valores correspondentes. Se um registro não tiver uma correspondência, ele será deixado de fora dos resultados.

Dê uma olhada no resultado definido a partir desta consulta:

id size color_id id name
1 seven 2 2 green
2 eight 2 2 green
3 nine 2 2 green
4 seven 1 1 yellow
5 nine 1 1 yellow
6 seven 3 3 pink

Agora podemos ver a cor de cada par de sapatos, graças ao INNER JOIN. Mas note que o shoes com NULL na coluna color_id não é mostrado: não correspondeu a nenhum dos registros no color mesa.

JOIN ou INNER JOIN?

Você pode omitir a parte INNER de INNER JOIN; JOIN funciona da mesma maneira. Veja a declaração abaixo.

SELECT *  FROM  shoes
JOIN color  ON color.id = shoes.color_id;

Juntando-se a ONDE

Você também pode usar uma cláusula WHERE como uma INNER JOIN. (Esta é uma versão mais antiga da sintaxe SQL (ANSI-89); os comandos JOIN usam ANSI-92). Aqui está como funciona o uso de um WHERE:

SELECT *  FROM  shoes, color  
WHERE color.id = shoes.color_id ;

O resultado é o mesmo:

id size color_id id name
1 seven 2 2 green
2 eight 2 2 green
3 nine 2 2 green
4 seven 1 1 yellow
5 nine 1 1 yellow
6 seven 3 3 pink

Usando um INNER JOIN em Múltiplas Tabelas

INNER JOIN pode ser usado em mais de duas mesas. Veja as três tabelas abaixo:

color

id name
1 yellow
2 green
3 pink

material

id name
1 leather
2 cotton
3 NULL

shoes

id size color_id material_id
1 seven 2 1
4 seven 1 2
5 nine 1 1
6 seven 3 NULL
7 ten NULL 1

Vamos usar um INNER JOIN para combinar informações em todas as três tabelas. A consulta abaixo recupera registros para todos os sapatos que possuem informações de cor e material:

SELECT *  FROM  shoes
JOIN color  ON color.id = shoes.color_id
JOIN material  ON material.id = shoes.material_id ;

Observe que apenas os sapatos com registros nãoNULL nas colunas color_id e material_id são mostrados no conjunto de resultados.

id size color_id material_id id name id name
1 seven 2 1 2 green 1 leather
4 seven 1 2 1 yellow 2 cotton
5 nine 1 1 1 yellow 1 leather

INNER JOIN vs. CROSS JOIN

Como já vimos, INNER JOIN combina informações de dois ou mais registros que possuem campos correspondentes. O que acontece quando você usa CROSS JOIN para se juntar à shoes e color CROSS JOIN não aceita nenhuma condição ON, o que significa que ele devolve um produto cartesiano. Dê uma olhada na consulta e no resultado apresentados abaixo:

SELECT *  FROM  shoes
CROSS JOIN  color ;

Resultado?

id size color_id id name
1 seven 2 1 yellow
2 eight 2 1 yellow
3 nine 2 1 yellow
4 seven 1 1 yellow
5 nine 1 1 yellow
6 seven 3 1 yellow
7 ten NULL 1 yellow
1 seven 2 2 green
2 eight 2 2 green
3 nine 2 2 green
4 seven 1 2 green
5 nine 1 2 green
6 seven 3 2 green
7 ten NULL 2 green
1 seven 2 3 pink
2 eight 2 3 pink
3 nine 2 3 pink
4 seven 1 3 pink
5 nine 1 3 pink
6 seven 3 3 pink
7 ten NULL 3 pink

Todos os registros do shoes tabela foram unidos com todos os registros do color mesa. Isto cria alguns erros. Por exemplo, alguns sapatos não estão listados com a cor correta: os sapatos de tamanho oito só estão disponíveis em verde (seu valor color_id é 2), mas nesta junção, eles são combinados com outras cores. O NULL registra no shoes A tabela também é combinada com cores, mesmo que não tenham um valor comparável no campo color_id.

Saiba mais sobre a INNER JOINs

INNER JOINs são bastante comuns em SQL. Nosso objetivo neste artigo foi introduzir os conceitos por trás do INNER JOIN, mas há muito mais a aprender. Por que não verificar o LearnSQL's SQL para Iniciantes curso para saber mais?