Voltar para a lista de artigos Artigos
7 minutos de leitura

Como Juntar Duas Tabelas em SQL

É muito comum precisar consultar dados de várias tabelas ao trabalhar com bancos de dados relacionais, e não é algo difícil se você souber usar os operadores SQL específicos para isso. Neste artigo, você aprenderá como juntar duas tabelas usando WHERE e o operador especial JOIN, e verá como filtrar linhas nos resultados.

SSe você deseja praticar a união de tabelas em SQL, confira nosso curso interativo Cláusulas JOIN em SQL. Ele oferece mais de 90 exercícios práticos sobre diferentes tipos de JOINs. Para mais cursos práticos de SQL, confira a nossa Trilha de Práticas em SQL.

Como Criar Consultas com Uma Única Tabela

vamos relembrar brevemente como selecionar dados de uma única tabela. Considere a seguinte tabela, produto:

idnomepreco
1Relógio Inteligente Erin234.00
2Relógio Inteligente Sun455.00
3Pulseira Inteligente Eli300.00
4Pulseira Inteligente White124.00

Para selecionar dados de todas as colunas e de todas as linhas desta tabela, você pode usar a consulta:

SELECT id, nome, preco 
FROM produto;

Nesta consulta simples, os nomes das colunas das quais você deseja selecionar dados aparecem após SELECT. Em seguida, vêm a cláusula FROM e o nome da tabela onde os dados estão armazenados.

Você também pode filtrar linhas para selecionar apenas os registros que correspondem às condições determinadas. Confira o seguinte código em SQL:

SELECT nome, preco 
FROM produto
WHERE preco < 250.00;

Neste caso, o conjunto de resultados consiste em apenas duas linhas com o nome das colunas e o preco:

nomepreco
Relógio Inteligente Erin234.00
Pulseira Inteligente White124.00

As colunas são listadas após o operador SELECT e, em seguida, a cláusula FROM especifica a tabela da qual os dados serão extraídos. Ao final da consulta, a cláusula WHERE é acompanhada da condição de filtragem. Neste exemplo, a condição compara o valor na coluna preco a 250,00. A consulta somente retornará as informações de um produto se o preço dele for inferior a 250,00.

Criando Consultas a Partir de Várias Tabelas Usando WHERE

Bancos de dados relacionais são compostos por várias tabelas relacionadas entre si. As linhas de uma tabela se referem a linhas específicas em outra tabela, conectadas por uma ou mais colunas de identificação. Agora, vamos aprender como juntar os dados de uma tabela com dados de outra tabela.

Considere as duas tabelas a seguir, produto e categoria em um banco de dados sobre produtos em estoque:

produto

idnome_produtoprecoid_categoria
1relógio inteligente235.002
2tijolos26.703
3lâmpada128.002
4sofá3200.001
5mesa1350.001
6extensão de tomada29.002

categoria

idnome_categoria
1móveis
2eletrônicos
3brinquedos

Imagine que você precise de algumas informações deste banco de dados, como o nome dos produtos, o preço e suas respectivas categorias. Você pode juntar linhas da tabela produto com linhas da tabela categoria usando uma cláusula WHERE. Dê uma olhada na consulta abaixo:

SELECT produto.nome_produto, produto.preco, relógio inteligente_categoria 
FROM produto, categoria 
WHERE produto.id_categoria = categoria.id ;

Aqui está o conjunto de resultados:

nome_produtopreconome_categoria
relógio inteligente235.00eletrônicos
tijolos26.70brinquedos
lâmpada128.00eletrônicos
sofá3200.00móveis
mesa1350.00móveis
extensão de tomada29.00eletrônicos

Nesta consulta, a cláusula SELECT lista colunas de ambas as tabelas: nome_produto e preco da tabela produto e nome_categoria da tabela categoria. Cada nome de coluna é precedido pelo nome da tabela correspondente, separados por um ponto final.

Em seguida, os nomes das tabelas são listados após a cláusula FROM, separados por vírgulas.

A última parte desta consulta é uma cláusula WHERE, com uma condição que especifica como juntar as linhas de ambas as tabelas. Aqui, os valores da coluna id_categoria da tabela produto correspondem aos valores na coluna id da tabela categoria, e as linhas são unidas quando os valores são iguais (produto.id_categoria = categoria.id). O relógio inteligente na tabela produto tem um ID de categoria igual 2. O mesmo valor na coluna id da tabela categoria aponta para "eletronicos", como destacado em verde acima.

Caso existam colunas com o mesmo nome em ambas as tabelas, elas precisam ser diferenciadas ao serem nomeadas na cláusula SELECT. Para isso, você deve nomear a tabela, incluir um ponto e, em seguida, o nome da coluna. No nosso exemplo, porém, os nomes das colunas nas tabelas são diferentes. Assim, podemos usar apenas os nomes das colunas em SELECT sem especificar de quais tabelas elas vêm, como na consulta abaixo:

SELECT nome_produto, preco, nome_categoria 
FROM produto, categoria 
WHERE produto.id_categoria = categoria.id ;

Usar WHERE é uma das maneiras de selecionar dados de várias tabelas. Trata-se de um padrão SQL mais antigo e, embora ainda esteja disponível, raramente é utilizado. Na próxima seção, vamos conhecer outro método.

Criando Consultas a Partir de Várias Tabelas Usando JOIN

Atualmente, o método mais comum para juntar dados de várias tabelas utiliza o operador especial JOIN, também conhecido como INNER JOIN. Para ver como ele funciona, utilizaremos as mesmas duas tabelas do banco de dados de estoque, que você pode ver a seguir.

produto

idnomeprecoid_categoria
1relógio inteligente235.002
2tijolos26.703
3lâmpada128.002
4sofá3200.001
5mesa1350.001
6extensão de tomada29.002

categoria

idnome
1móveis
2eletrônicos
3brinquedos

Dê uma olhada na consulta a seguir, que atribui a categoria da tabela categoria a cada nome de produto na tabela produto.

SELECT
  produto.nome AS nome_produto,
  categoria.nome AS nome_categoria
FROM produto
JOIN categoria ON produto.id_categoria=categoria.id;

A junção é feita pelo operador JOIN. Na cláusula FROM, o nome da primeira tabela (produto) é seguido de um operador JOIN e, depois, do nome da segunda tabela (categoria). Em seguida, utiliza-se a cláusula ON e a condição para a junção de linhas das diferentes tabelas. O nome da categoria é determinado com base na coluna id da tabela categoria, que é equivalente à id_categoria na tabela produto (produto.id_categoria=categoria.id).

Aqui está o conjunto de resultados:

nome_produtonome_categoria
relógio inteligenteeletrônicos
tijolosbrinquedos
lâmpadaeletrônicos
sofámóveis
mesamóveis
extensão de tomadaeletrônicos

O relógio inteligente tem id_categoria igual a 2. Na coluna id da tabela categoria, o valor 2 é associado aos eletrônicos e, portanto, atribui-se a categoria de eletrônicos ao relógio inteligente.

O uso do operador JOIN é o método mais comum para unir várias tabelas em um banco de dados. No artigo "Um Guia Ilustrado sobre INNER JOIN em SQL", eu falo um pouco mais sobre este operador. O artigo "Explicando SQL INNER JOIN de Forma Simples" também aprofunda este tópico. Como já mencionamos, os operadores INNER JOIN e JOIN são equivalentes e podem ser usados de forma intercambiável.

Selecionando Dados de Tabelas Usando JOIN e WHERE

A utilização de operadores JOIN para selecionar dados de várias tabelas também permite filtrar os resultados de forma mais fácil. Veja a consulta a seguir, que é uma variação da consulta anterior e se baseia nos mesmos dados:

SELECT
  produto.nome AS nome_produto,
  categoria.nome AS nome_categoria
FROM produto
JOIN categoria ON produto.id_categoria=categoria.id
WHERE categoria.nome != ’brinquedos’;

Aqui está o resultado:

nome_produtonome_categoria
relógio inteligenteeletrônicos
lâmpadaeletrônicos
sofámóveis
mesamóveis
extensão de tomadaeletrônicos

A primeira parte desta consulta é igual à anterior. Aqui, entretanto, os produtos da categoria "brinquedos" foram excluídos. Filtramos as linhas dos resultados usando uma cláusula WHERE para verificar se a categoria é diferente de "brinquedos" (categoria.nome != ’brinquedos’).

Para mais práticas de JOIN em SQL, confira o nosso curso prático de Cláusulas JOIN em SQL, leia o artigo "Como praticar Cláusulas JOIN em SQL" ou assista ao vídeo "Noções Básicas de SQL JOIN" da série "Nós Aprendemos SQL".

Há também outros operadores JOIN. Além de JOIN ou INNER JOIN, existem ainda os operadores LEFT JOIN, RIGHT JOIN e FULL JOIN. Leia mais sobre eles em "Cláusulas JOIN em SQL para Iniciante". Para mais práticas em SQL, confira nossa Trilha de Práticas em SQL.

Juntando Tabelas em SQL

Vimos aqui como extrair informações completas sobre objetos através da junção de várias tabelas relacionadas em um banco de dados relacional. Isso pode ser feito utilizando os comandos WHERE ou JOIN. Para saber mais sobre as diferenças entre esses métodos, recomendo um artigo muito interessante: "Qual a diferença entre ter várias tabelas em FROM e usando JOIN?

Aqui eu forneci apenas uma visão inicial sobre o assunto, então continue aprendendo!