Pular para o conteúdo principal

Como unir 3 tabelas no SQL: Métodos e exemplos

Saiba como unir efetivamente três tabelas no SQL. Descubra métodos e exemplos práticos para aprimorar suas habilidades de manipulação de dados. Domine as junções SQL com facilidade.
Actualizado 14 de fev. de 2025  · 7 min de leitura

Embora as uniões SQL sejam comumente usadas para combinar dados de duas tabelas, você não precisa parar por aí. Na verdade, você pode mesclar dados de três ou mais tabelas para descobrir relações e percepções ainda mais complexas dos seus dados.

Neste artigo, mostrarei a você exemplos de junção de três tabelas no SQL; também consideraremos implementações específicas de banco de dados e práticas recomendadas. Eu também recomendo muito que você faça nossos cursos Introduction to SQL e Learn SQL para obter todo o conhecimento básico importante.

As etapas para unir 3 tabelas no SQL

A união de três tabelas no SQL permite que você realize consultas complexas para recuperar dados em várias tabelas. Ao unir três tabelas, usamos a cláusula JOIN para combinar os dados dessas tabelas. 

Suponha que você tenha as três tabelas a seguir: Customers, Products, e Orders.

Exemplo de tabela Customers no SQL.

Exemplo de tabela Customers no SQL. Imagem do autor.

Exemplo de tabela Products no SQL.

Exemplo de tabela Products no SQL. Imagem do autor.

Exemplo de tabela Orders no SQL.

Exemplo de tabela Orders no SQL. Imagem do autor.

Primeiro, você pode unir as tabelas Customers e Orders para mostrar quais clientes fizeram pedidos e seus detalhes, como order_id, order_date e o pedido quantity.

-- Select data from Customers
SELECT 
    Customers.customer_id, 
    Customers.first_name, 
    Customers.last_name, 
    Orders.order_id, 
    Orders.order_date, 
    Orders.quantity 
FROM Customers
-- Join Orders table
INNER JOIN Orders 
ON Customers.customer_id = Orders.customer_id;

Exemplo de tabela SQL JOIN Customers e Orders.

Exemplo de tabela SQL JOIN Customers e Orders. Imagem do autor.

Por fim, você pode combinar as três tabelas, Customers, Orders e Products, para obter uma visão abrangente dos clientes, seus pedidos, os produtos que compraram e o custo total de cada pedido.

-- Select data starting with Customers
SELECT 
    Customers.customer_id,
    Customers.first_name,
    Customers.last_name,
    Orders.order_id,
    Orders.order_date,
    Products.product_name,
    Orders.quantity,
    Products.price,
    (Orders.quantity * Products.price) AS total_cost -- Total cost calculation
FROM Customers
-- Join the Orders table based on customer_id
INNER JOIN Orders 
ON Customers.customer_id = Orders.customer_id
-- Join the Products table based on product_id
INNER JOIN Products 
ON Orders.product_id = Products.product_id;

Exemplo de SQL JOIN de três tabelas.

Exemplo de SQL JOIN de três tabelas. Imagem do autor.

Vejamos os exemplos práticos de uso de INNER JOIN, LEFT JOIN e RIGHT JOIN para unir três tabelas. Consulte nosso tutorial Introdução às uniões de SQL para saber mais sobre os diferentes tipos e exemplos de uniões.

Exemplos de como unir 3 tabelas no SQL

Vamos ver alguns exemplos práticos usando INNER JOIN, LEFT JOIN e RIGHT JOIN para unir três tabelas.

Se você tiver dúvidas sobre o significado de qualquer uma dessas uniões e quiser praticar mais para realmente dominar as técnicas corretas, inscreva-se em nosso curso Unindo dados em SQL, que não só o ajudará com as uniões SQL, mas também o ensinará sobre a teoria de conjuntos relacionais e subconsultas.

Usando INNER JOIN

Um INNER JOIN recupera registros com valores correspondentes em todas as três tabelas, filtrando qualquer registro que não corresponda. O uso do site INNER JOIN é ideal quando você só precisa de resultados que tenham relações diretas em todas as tabelas envolvidas.

Suponha que você tenha três tabelas: Customers, Orders, e Products. A consulta abaixo recupera apenas os clientes que fizeram pedidos e inclui detalhes dos produtos associados a cada pedido.

-- Select customer details, order information, and associated product names
SELECT 
    Customers.customer_id, 
    Customers.customer_name, 
    Orders.order_id, 
    Products.product_name 
-- Select from Customers table
FROM Customers
    -- Join Orders table
    INNER JOIN Orders 
        ON Customers.customer_id = Orders.customer_id
    -- Join Products table
    INNER JOIN Products 
        ON Orders.product_id = Products.product_id;

Usando LEFT JOIN

O LEFT JOIN retorna todos os registros da primeira tabela (esquerda) e todos os registros correspondentes das outras duas tabelas. Se não houver correspondência, os valores NULL serão retornados para as colunas da tabela correta. O LEFT JOIN é útil para recuperar todos os registros da tabela principal, mesmo que algumas linhas não tenham dados relacionados nas outras tabelas.

No exemplo a seguir, todos os clientes aparecerão no resultado, mesmo que não tenham feito um pedido. Os campos de dados retornarão valores NULL se não houver dados correspondentes de pedidos ou produtos.

-- Select customer details, order information, and product names
SELECT 
    Customers.customer_id, 
    Customers.customer_name,
    Orders.order_id, 
    Products.product_name
FROM Customers
    -- Join Orders table
    LEFT JOIN Orders 
        ON Customers.customer_id = Orders.customer_id
    -- Join Products table
    LEFT JOIN Products 
        ON Orders.product_id = Products.product_id;

Como observação, LEFT JOIN é o mesmo que LEFT OUTER JOIN no SQL. Temos um tutorial que fornece detalhes: SQL LEFT JOIN vs. UNIÃO EXTERNA ESQUERDA.

Usando RIGHT JOIN

O site RIGHT JOIN recupera todos os registros da terceira tabela (mais à direita) e todos os registros correspondentes das tabelas à esquerda. Embora o RIGHT JOIN seja menos comum, ele ainda é útil para priorizar registros na tabela mais à direita.

Por exemplo, em uma análise de inventário, você pode querer saber quais produtos têm pedidos ou interações com clientes. Todos os produtos serão listados na consulta abaixo, incluindo qualquer pedido associado ou dados do cliente. Se houver produtos que não tenham sido pedidos, os campos order_id e customer_name mostrarão NULL.

-- Select customer details, order information, and product names
SELECT 
    Customers.customer_id,
    Customers.customer_name,
    Orders.order_id,
    Products.product_name
 -- Select from Customers table
FROM Customers
 -- Join Orders table
    RIGHT JOIN Orders 
        ON Customers.customer_id = Orders.customer_id
 -- Join Products table
    RIGHT JOIN Products 
        ON Orders.product_id = Products.product_id;

Embora os exemplos acima demonstrem o uso de um único tipo de união (INNER JOIN, LEFT JOIN ou RIGHT JOIN), é totalmente possível - e muitas vezes necessário - combinar diferentes tipos de união na mesma consulta para lidar com relacionamentos de dados mais complexos. Por exemplo, você pode usar um LEFT JOIN para incluir todos os registros de uma tabela enquanto usa um INNER JOIN para outro relacionamento dentro da mesma consulta.

Nesse sentido, também devemos dizer que o SQL processa as uniões sequencialmente da esquerda para a direita, de modo que a sequência determina como as tabelas são combinadas e como os valores NULL são tratados. É por isso que comecei este artigo mostrando o processo como um processo de duas etapas. O caminho a seguir é criar a consulta passo a passo e verificar os resultados de forma incremental. LEFT JOIN seguido de INNER JOIN geralmente é diferente de INNER JOIN seguido de LEFT JOIN.

Por que precisamos unir 3 tabelas no SQL

Vamos falar um pouco sobre o design do banco de dados. O motivo pelo qual agora é comum você ter que fazer uniões em mais de duas tabelas é que a normalização do banco de dados agora é comum. Os bancos de dados (e, na verdade, as pessoas que projetam os bancos de dados) fazem isso organizando as informações em tabelas distintas e relacionadas. Isso foi projetado para eliminar a redundância (e também por outros motivos). Essa decomposição do banco de dados significa que os dados relevantes para diferentes entidades - como as tabelas Customers, Orders e Products que vimos acima - são armazenados separadamente.

Em outras palavras, como os dados são frequentemente armazenados em um esquema de banco de dados normalizado, a recuperação de informações geralmente requer a combinação de dados de várias tabelas. Por esse motivo, devemos saber como escrever consultas que façam muitas uniões, pois, simplesmente, é assim que os dados provavelmente estão estruturados. Nosso curso de Design de banco de dados é um bom recurso para essas ideias.

Recursos de união específicos do banco de dados

Embora as uniões SQL sejam consistentes na maioria dos bancos de dados relacionais, há algumas diferenças no tratamento de uniões múltiplas envolvendo três tabelas ou mais. Vamos analisar as implementações e considerações específicas do banco de dados para evitar armadilhas e problemas de otimização.

MySQL

Normalmente, o MySQL tem um bom desempenho com junções básicas, mas pode ter dificuldades com consultas complexas que envolvem várias tabelas. O comando EXPLAIN do MySQL é útil para você entender o desempenho das junções e identificar maneiras de otimizar as consultas com indexação ou reescrita de consultas. O MySQL também suporta a palavra-chave STRAIGHT_JOIN, que força a ordem de junção, melhorando potencialmente o desempenho da consulta nos casos em que a otimização de junção padrão não é ideal.

PostgreSQL

O poderoso otimizador do PostgreSQL o torna altamente eficiente para uniões complexas, mesmo com grandes conjuntos de dados. Seu suporte a consultas recursivas usando a cláusula WITH RECURSIVE permite unir dados hierárquicos em várias tabelas. As funções de janela do PostgreSQL são avançadas e podem complementar as uniões, permitindo a análise linha por linha em um conjunto de dados unido.

SQL Server

O SQL Server permite que dicas de união específicas (MERGE JOIN, LOOP JOIN e HASH JOIN) substituam o comportamento padrão, melhorando o desempenho das uniões de várias tabelas. Os operadores CROSS APPLY e OUTER APPLY do SQL Server são ferramentas poderosas para unir tabelas com funções de valor de tabela, proporcionando mais flexibilidade em consultas de várias tabelas.

Recomendo que você faça o curso Introdução ao SQL Server da DataCamp para entender as diferentes funcionalidades do SQL Server na consulta de dados. Além disso, experimente nosso curso de habilidades do SQL Server Fundamentals para aprimorar suas habilidades em tabelas de junção e análise de dados. A carreira de Desenvolvedor do SQL Server equipará você com as habilidades para escrever, solucionar problemas e otimizar suas consultas usando o SQL Server.

Oracle SQL

O Oracle suporta todas as uniões padrão e oferece opções exclusivas, como NATURAL JOIN, que une automaticamente as tabelas com base em nomes de colunas correspondentes. O suporte da Oracle para consultas hierárquicas com o site CONNECT BY pode, às vezes, reduzir a necessidade de junções adicionais ao lidar com dados aninhados de forma mais eficiente.

Práticas recomendadas ao unir 3 tabelas no SQL

A união de três tabelas no SQL pode aumentar a complexidade da consulta e afetar o desempenho, especialmente à medida que o tamanho dos dados aumenta. A seguir, você encontrará as práticas recomendadas e as técnicas de otimização para melhorar o desempenho da consulta.

  • Use a indexação adequada: As colunas de índice usadas com frequência em condições de união aceleram a recuperação de dados, reduzindo a quantidade de dados digitalizados.

  • Filtrar antecipadamente usando as condições WHERE e JOIN: Coloque as condições de filtragem diretamente na cláusula JOIN ou WHERE para reduzir os dados que precisam ser processados nas uniões subsequentes, melhorando o desempenho.

  • Considere a ordem e o tipo de união: Ao unir várias tabelas, junte primeiro as tabelas menores para minimizar o conjunto de dados o mais rápido possível.  Evite usar as uniões LEFT ou RIGHT se a sua análise não exigir registros sem correspondência.

  • Minimizar colunas selecionadas com SELECT: Evite usar o site SELECT * para incluir colunas desnecessárias nos dados. Selecione explicitamente as colunas necessárias para reduzir os dados retornados por cada tabela, minimizando o uso da memória e melhorando o desempenho da consulta.

  • Use subconsultas ou tabelas temporárias para uniões complexas: Considere dividir a consulta em partes menores usando subconsultas para uniões muito complexas. Para uniões que envolvem consultas complexas repetidas, considere armazenar resultados intermediários em tabelas temporárias para economizar tempo de processamento, especialmente para consultas que exigem cálculos extensos.

Conclusão e aprendizado adicional

A união de três tabelas no SQL permite que você combine dados em várias tabelas para uma análise abrangente de dados e gerenciamento de banco de dados. Ao dominar as técnicas corretas, você garantirá que seu código seja eficiente, escalonável e de alto desempenho.

Se você deseja se tornar um analista de dados proficiente, confira nosso curso de carreira de Analista de Dados Associado em SQL para aprender as habilidades necessárias. O curso Reporting in SQL também é adequado se você quiser aprender a criar painéis profissionais usando SQL. Por fim, recomendo que você obtenha a Certificação SQL Associate para demonstrar que domina o uso do SQL para análise de dados e para destacar seu currículo.


Allan Ouko's photo
Author
Allan Ouko
LinkedIn
Eu crio artigos que simplificam a ciência e a análise de dados, tornando-as fáceis de entender e acessíveis.

Perguntas frequentes

Que tipos de uniões podem ser usados para unir três tabelas?

Você pode usar INNER JOIN, LEFT JOIN, RIGHT JOIN e, ocasionalmente, FULL JOIN para combinar três tabelas.

A ordem de junção é importante quando você junta três tabelas?

A ordem de união pode afetar o desempenho, especialmente em tabelas maiores. Começar com tabelas menores ou altamente filtradas geralmente melhora a eficiência.

Como posso otimizar o desempenho ao unir três tabelas no SQL?

Para otimizar o desempenho, garanta a indexação adequada das colunas usadas nas uniões, limite o número de linhas retornadas com as cláusulas WHERE e selecione somente as colunas necessárias.

Posso unir mais de três tabelas?

Você pode unir mais de três tabelas no SQL, mas a consulta pode se tornar mais complexa e exigir otimizações de desempenho.

Temas

Aprenda SQL com a DataCamp

curso

Joining Data in SQL

4 hr
201.4K
Level up your SQL knowledge and learn to join tables together, apply relational set theory, and work with subqueries.
Ver DetalhesRight Arrow
Iniciar curso
Ver maisRight Arrow
Relacionado

tutorial

Exemplos e tutoriais de consultas SQL

Se você deseja começar a usar o SQL, nós o ajudamos. Neste tutorial de SQL, apresentaremos as consultas SQL, uma ferramenta poderosa que nos permite trabalhar com os dados armazenados em um banco de dados. Você verá como escrever consultas SQL, aprenderá sobre
Sejal Jaiswal's photo

Sejal Jaiswal

21 min

tutorial

Como usar um alias SQL para simplificar suas consultas

Explore como o uso de um alias SQL simplifica os nomes de colunas e tabelas. Saiba por que usar um alias SQL é fundamental para melhorar a legibilidade e gerenciar uniões complexas.
Allan Ouko's photo

Allan Ouko

9 min

tutorial

Tutorial de SQLAlchemy com exemplos

Aprenda a acessar e executar consultas SQL em todos os tipos de bancos de dados relacionais usando objetos Python.
Abid Ali Awan's photo

Abid Ali Awan

13 min

tutorial

Introdução aos acionadores SQL: Um guia para desenvolvedores

Saiba como usar os acionadores SQL para automatizar tarefas, manter a integridade dos dados e melhorar o desempenho do banco de dados. Experimente exemplos práticos como os comandos CREATE, ALTER e DROP no MySQL e no Oracle.
Oluseye Jeremiah's photo

Oluseye Jeremiah

13 min

tutorial

Tutorial do Insert Into SQL

A instrução "INSERT INTO" do SQL pode ser usada para adicionar linhas de dados a uma tabela no banco de dados.
DataCamp Team's photo

DataCamp Team

3 min

tutorial

SELEÇÃO de várias colunas no SQL

Saiba como selecionar facilmente várias colunas de uma tabela de banco de dados em SQL ou selecionar todas as colunas de uma tabela em uma consulta simples.
DataCamp Team's photo

DataCamp Team

3 min

Ver maisVer mais