Voltar para a lista de artigos Artigos
8 minutos de leitura

Como unir tabelas em SQL sem usar JOINs

Veja como você pode combinar tabelas sem a ENCONTRE palavra-chave.

Parece que isso não deveria ser possível: juntar tabelas em SQL sem usar a palavra-chave JOIN. Mas usar a palavra-chave JOIN não é a única maneira de unir tabelas em SQL.

Este artigo mostrará dois métodos adicionais para unir tabelas. Nenhum deles requer a palavra-chave JOIN para funcionar. Eles são:

  1. Usando uma vírgula entre os nomes das tabelas na cláusula FROM e especificando a condição de junção em um WHERE
  2. Usando UNION/UNION ALL.

Presumo que você saiba como funciona o JOINs. Se você precisar, aqui está uma atualização sobre como juntar mesas usando o JOINs.

O Primeiro Método: DE E ONDE

Sintaxe

A sintaxe para este método de juntar tabelas sem utilizar JOINs é:

SELECT *
FROM , 
WHERE 

Você pode substituir a palavra-chave JOIN por uma vírgula na cláusula FROM. O que você faz a seguir? Não há nenhuma palavra-chave ON para você declarar a condição de junção como haveria ao usar JOIN, por exemplo, em quais duas colunas você quer juntar as tabelas. Neste método, você simplesmente usa uma cláusula WHERE para fazer isso.

Este método faz exatamente o mesmo que:

SELECT *
FROM <table1> JOIN <table2>
ON <condition>

Vamos ver como ele funciona na prática.

Exemplo

Neste exemplo, preciso encontrar o nome do artista, os álbuns que ele gravou e os anos em que eles foram gravados, para cada artista.

Para mostrar como este método funciona, vou usar duas mesas. A primeira é artist:

idartist_name
1Paul Simon
2Marvin Gaye
3Bettye LaVette
4Joni Mitchell
5Sly and the Family Stone

É uma mesa simples contendo vários de meus músicos favoritos.

A outra mesa, album, parece que é assim:

idalbum_nameyear_recordedartist_id
1Dance to the Music19685
2Small Talk19745
3Stranger to Stranger20161
4I've Got My Own Hell to Raise20053
5Blues19714
6Court and Spark19744
7A Tribute to the Great Nat "King" Cole19652
8Graceland19861
9Still Crazy After All These Years19751
10In the Blue Light20181
11There's a Riot Goin' On19715
12The Scene of the Crime20073
13Mingus19794
14What's Going On19712
15Here, My Dear19782

Estes são os álbuns gravados pelos músicos da primeira mesa.

Consulta

A consulta para unir estas tabelas sem uma palavra-chave JOIN se parece com isto:

SELECT
    artist_name,
    album_name,
    year_recorded
FROM artist, album
WHERE artist.id = album.artist_id;

Em primeiro lugar, eu especifico as colunas que eu quero ver no meu resultado: artist_name, album_name, e year_recorded. Elas vêm de um artist ou album. Eu junto estas duas tabelas simplesmente listando-as na cláusula FROM e separando-as com uma vírgula.

A cláusula WHERE é geralmente usada para filtrar os resultados. Posso usá-la para filtrar este resultado de modo que mostre todos os dados onde a coluna id da tabela artist é igual à coluna artist_id da tabela album. Você pode ver a condição em ON nesta consulta é a mesma que seria após a palavra-chave ON ao usar JOIN: artist.id = album.artist_id.

A consulta equivalente com uma palavra-chave JOIN é:

SELECT 	artist_name,
		album_name,
		year_recorded
FROM artist
JOIN album
ON artist.id = album.artist_id;

Resultado:

Ambas as consultas retornam o mesmo resultado:

artist_namealbum_nameyear_recorded
Paul SimonIn the Blue Light2018
Paul SimonStill Crazy After All These Years1975
Paul SimonGraceland1986
Paul SimonStranger to Stranger2016
Marvin GayeHere, My Dear1978
Marvin GayeWhat's Going On1971
Marvin GayeA Tribute to the Great Nat "King" Cole1965
Bettye LaVetteThe Scene of the Crime2007
Bettye LaVetteI've Got My Own Hell to Raise2005
Joni MitchellMingus1979
Joni MitchellCourt and Spark1974
Joni MitchellBlues1971
Sly and the Family StoneThere's a Riot Goin' On1971
Sly and the Family StoneSmall Talk1974
Sly and the Family StoneDance to the Music1968

Você vê o resultado combina dados das duas tabelas iniciais. Posso ver agora, por exemplo, Paul Simon gravou o álbum "In the Blue Light" em 2018. Se você não confia em minha consulta, você sempre pode verificar na Wikipedia!

Este método usa uma coluna comum para juntar tabelas. Lembre-se de que você também pode unir mesas que não têm uma coluna comum.

O segundo método: UNIÃO/UNIÃO TODOS

Sintaxe

SELECT
    ,
    ,
    …
FROM 

UNION / UNION ALL

SELECT
    ,
    ,
    …
FROM 

Tanto UNION quanto UNION ALL são usados para colar o resultado da primeira consulta com o da segunda consulta. Basta escrever duas declarações SELECT e escrever UNION ou UNION ALL entre elas. Mas qual é a diferença entre essas duas palavras-chave SQL? Relembrar:

  • UNION remove as linhas duplicadas da consulta e as mostra apenas uma vez.
  • UNION ALL mostra todas as linhas de ambas as tabelas, não importa quantas duplicatas existam.

Para que ambas UNION e UNION ALL funcionem, todas as colunas das duas declarações SELECT precisam corresponder. Isto significa que o número de colunas selecionadas deve ser o mesmo, e os tipos de dados dessas colunas devem ser os mesmos.

Estes dois operadores são chamados de operadores de conjunto. Leia este artigo para saber mais sobre estes e outros operadores de conjunto.

Exemplo

Temos duas tabelas neste exemplo, também. A primeira é denominada customer:

idfirst_namelast_name
1JimmyHellas
2FrancoisJambony
3RenataTraviata
4CarmenNaburana
5SteveInicks
6ElviraSamson
7AlpaCino
8RosaSparks
9BernardineSane
10BertRandrussell

Ela contém uma lista de meus clientes.

A segunda tabela é supplier:

idfirst_namelast_name
1ArpadPolanski
2BillyVan Persie
3SteveInicks
4Jean-ClaudeZaandam
5EminaArkayeva
6BoMilosz
7JanWrangler
8HeinrichStroopwafel
9HerringoStarr
10JosephineMatijevic
11AlpaCino
12FlintWestwood
13DesPaulmond
14WilmaJackson
15KatrinVerson
16BertRandrussell
17CarmenNaburana
18JimmyTulp
19LuisWolf
20MirandaFanucci

Se você inspecionar estas mesas um pouco mais de perto, você verá que algumas pessoas estão em ambas as mesas. Por exemplo, olhe para Steve Inicks - isto significa que Steve é, junto com alguns outros, tanto meu cliente (ele compra alguns serviços da minha empresa) quanto meu fornecedor (ele fornece alguns serviços para mim).

Agora, vamos ver como é quando eu me junto a estas mesas com UNION ou UNION ALL.

Consulta: UNIÃO

Este método de combinar tabelas sem utilizar a palavra-chave JOIN traduz a seguinte consulta:

SELECT 	
    first_name,
    last_name
FROM customer

UNION

SELECT	
    first_name,
    last_name
FROM supplier;

A primeira declaração SELECT seleciona as colunas first_name e last_name da tabela customer. A segunda declaração SELECT faz o mesmo, mas a partir da tabela supplier. Eu uso UNION para juntar os resultados dessas duas consultas. Funciona: há duas colunas em ambas as declarações SELECT, e elas são do mesmo tipo de dados. Elas são até denominadas da mesma forma, embora isso não seja necessário para que a consulta funcione.

Resultado: UNIÃO

Executando a consulta você obtém isto:

first_namelast_name
AlpaArpad
CinoBilly
JosephineMatijevic
LuisWolf
Jean-ClaudeZaandam
SteveInicks
BillyVan Persie
EminaArkayeva
MirandaFanucci
BoMilosz
JimmyHellas
FrancoisJambony
RosaSparks
KatrinVerson
JanWrangler
BernardineSane
HeinrichStroopwafel
ElviraSamson
RenataTraviata
JimmyTulp
WilmaJackson
ArpadPolanski
BertRandrussell
DesPaulmond
FlintWestwood
CarmenNaburana
HerringoStarr

Como mencionei, é uma combinação de todos os dados de ambas as tabelas.

Vamos verificar se há duplicatas. Já mencionei que Steve Inicks está em ambas customer e supplier tabelas. No resultado da consulta, você o encontra apenas uma vez. Marquei a fila onde ele está.

Vamos ver como isto é diferente de UNION ALL.

Consulta: UNIÃO TODOS

A pergunta neste caso é:

SELECT
    first_name,
    last_name
FROM customer

UNION ALL

SELECT
    first_name,
    last_name
FROM supplier;

Como você pode ver, isto não é muito diferente. Na verdade, é a mesma consulta, exceto que ela tem UNION ALL em vez de UNION.

No entanto, os resultados são diferentes. Vamos dar uma olhada.

Resultado: UNIÃO TUDO

O resultado da consulta é:

first_namelast_name
JimmyHellas
FrancoisJambony
RenataTraviata
CarmenNaburana
SteveInicks
ElviraSamson
AlpaCino
RosaSparks
BernardineSane
BertRandrussell
ArpadPolanski
BillyVan Persie
SteveInicks
Jean-ClaudeZaandam
EminaArkayeva
BoMilosz
JanWrangler
HeinrichStroopwafel
HerringoStarr
JosephineMatijevic
AlpaCino
FlintWestwood
DesPaulmond
WilmaJackson
KatrinVerson
BertRandrussell
CarmenNaburana
JimmyTulp
LuisWolf
MirandaFanucci

Conhecendo Steve Inicks aparece como cliente e fornecedor, vamos verificar quantas vezes ele aparece no resultado. Ele está lá duas vezes, ambas marcadas em azul. Também marquei três outros que aparecem duas vezes: Alpa Cino, Bert Randrussell, e Carmen Naburana.

Aqui está outro exemplo de utilização de UNION e UNION ALL.

Sim, as mesas podem ser unidas sem a palavra-chave JOIN

Como você acabou de ver, nem sempre é necessário usar a palavra-chave JOIN para combinar duas tabelas em SQL.

Você pode substituí-la por uma vírgula na cláusula FROM e depois declarar sua condição de adesão na cláusula WHERE.

O outro método é escrever duas declarações em SELECT. O resultado de cada uma delas é uma tabela, então simplesmente use UNION ou UNION ALL para combinar as duas. Tenha em mente que isto só funciona se suas declarações SELECT tiverem o mesmo número de colunas e os mesmos tipos de dados.

Use UNION quando não quiser mostrar duplicatas e UNION ALL quando quiser ver duplicatas.

Aprenda todas as Formas Possíveis de Junção de Tabelas em SQL

Quanto mais maneiras você souber como juntar tabelas em SQL, melhor. Com estes dois métodos mais o JOIN, unir tabelas se torna mais fácil. Os resultados de sua consulta estão mais próximos do que você precisa, e você obtém mais do SQL.

Conhecer uma variedade de maneiras de juntar tabelas também permite que você sacuda um pouco seu código. Pode ser aborrecido escrever tudo da mesma maneira o tempo todo. Mas, o mais importante, cada um dos três métodos é útil em situações diferentes.

Você pode aprender todos esses métodos de juntar mesas em nosso curso SQL para Iniciantes . Este é apenas um primeiro passo para dominar SQL de A a Z. Você também precisa de muita prática para dominar a junção de mesas. Talvez, a melhor maneira seja escolher pelo menos uma opção on-line da nossa lista de dez.