Voltar para a lista de artigos Artigos
9 minutos de leitura

5 Melhores práticas para escrever SQL JOINs

Estas melhores práticas para Cláusulas JOIN em SQL ajudarão você a fazer consultas SQL legíveis que forneçam resultados precisos, claros e compreensíveis.

Considerando que os bancos de dados relacionais são construídos em torno de tabelas relacionadas, não é de se admirar que Cláusulas JOIN em SQL - que permitem combinar informações de várias tabelas - seja uma das principais habilidades adquiridas por novatos em SQL. Cláusulas JOIN em SQL curso por LearnSQL.com.br é o lugar perfeito para refrescar seus conhecimentos sobre JUNTAS. Se você quiser que suas consultas SQL funcionem e tenham aparência profissional, você precisa seguir as melhores práticas Cláusulas JOIN em SQL. Eu resumi algumas delas neste artigo.

Cláusulas JOIN em SQL Visão geral

Digamos que você queira ver todos os pedidos de um conjunto de clientes junto com seus nomes completos. Parece muito simples, certo? Entretanto, na prática, não é provável que você encontre informações sobre clientes e pedidos na mesma tabela. A tabela de pedidos pode incluir uma identificação do cliente para cada pedido, mas geralmente nada mais sobre os clientes.

Para combinar as informações do customers e orders tabelas, será necessário juntar-se a estas tabelas com base em um valor de coluna comum (ou seja, o número de identificação do cliente). Veja como sua consulta SQL pode parecer se você quiser ver todas as colunas de ambas as tabelas:

SELECT *
FROM customers
JOIN orders
ON customers.id = orders.customer_id;

Na cláusula SELECT, você especifica quais colunas você deseja ver na saída. Em seguida, você coloca o nome de uma tabela na cláusula FROM e o nome de outra tabela na cláusula JOIN. Finalmente, na cláusula ON, você especifica quais colunas de cada tabela devem ser usadas para adesão.

Você pode praticar a sintaxe SQL JOIN com nossa Cláusulas JOIN em SQL curso interativo, que inclui 93 desafios de codificação. Se você é novo em Cláusulas JOIN em SQL, confira meu guia passo a passo para juntar tabelas em SQL.

Antes de passar pelas melhores práticas do SQL JOIN, gostaria de lembrá-lo brevemente sobre os diferentes tipos de Cláusulas JOIN em SQL:

  • INNER JOIN (ou simples JOIN) é o tipo básico de junção. Ele é usado para exibir registros correspondentes de ambas as tabelas.
  • LEFT JOIN (ou LEFT OUTER JOIN) é aplicado para manter todos os registros da tabela da esquerda e somente os registros correspondentes da tabela da direita.
  • RIGHT JOIN (ou RIGHT OUTER JOIN) é usado para manter todos os registros da tabela da direita e somente os registros correspondentes da tabela da esquerda.
  • FULL JOIN (ou FULL OUTER JOIN) é usado para manter todos os registros de todas as tabelas, mesmo os inigualáveis.
  • CROSS JOIN retorna um conjunto de resultados com todas as combinações possíveis das linhas de duas tabelas.

Aqui está meu artigo com exemplos de diferentes tipos de SQL JOIN.

SQL JOIN é uma ferramenta poderosa que vai muito além da simples junção de duas tabelas usando uma coluna comum. Você pode usar diferentes tipos de Cláusulas JOIN em SQL para unir uma tabela com ela mesma (self-join); unir tabelas sem uma coluna comum; unir tabelas usando operadores condicionais que não sejam iguais (non-equi joins); unir várias tabelas (mais de duas) em uma consulta, ou unir tabelas baseadas em várias colunas.

Agora, vamos ver quais são as melhores práticas SQL ao unir duas ou mais tabelas.

5 Cláusulas JOIN em SQL Melhores Práticas

Se você deseja que suas consultas SQL sejam claras e legíveis - e, mais importante, que retornem o resultado esperado - você precisa seguir certas práticas para escrever Cláusulas JOIN em SQL.

1. Use as palavras-chave JOIN e ON

Antes de mais nada, é altamente recomendável o uso de junções explícitas, ou seja, usando as palavras-chave JOIN e ON. Às vezes é possível encontrar consultas SQL onde as tabelas são unidas implicitamente, simplesmente listando os nomes das tabelas na cláusula FROM e usando a cláusula WHERE para especificar a condição de união.

Por exemplo, as duas consultas a seguir darão o mesmo resultado:

SELECT *
FROM customers
JOIN orders
ON customers.id = orders.customer_id;
SELECT *
FROM customers, orders
WHERE customers.id = orders.customer_id;

Entretanto, apenas a primeira destas consultas segue as melhores práticas de JOIN. A segunda consulta, que tem a condição de junção implícita, tem vários problemas:

  • É menos legível; isto se agrava com consultas SQL complexas. Você tem que olhar atentamente para estabelecer as tabelas que estão sendo unidas. Você também tem que encontrar a condição de junção, que não tem uma palavra-chave padrão ON antes dela.
  • Você não pode especificar o tipo de JOIN ao usar um JOIN implícito (por exemplo, FROM customers, orders). Isto pode ser um problema se você precisar usar algo além do padrão INNER JOIN.
  • Adefinição de uma condição de join na cláusula WHERE pode ser muito confusa, já que esta não é a utilização típica da cláusula. WHERE é usado para filtrar dados; uma consulta é difícil de entender quando as condições de join são misturadas com as condições de filtragem em uma cláusula.

Portanto, use JOIN para especificar as tabelas para aderir e ON para especificar a condição de adesão.

2. Escolha o Tipo Apropriado de SQL JOIN

Antes de escrever uma consulta SQL, pense cuidadosamente sobre qual tipo de SQL JOIN é o mais apropriado neste caso em particular.

Se você estiver juntando clientes com uma lista de pedidos concluídos, você quer incluir clientes que ainda não têm pedidos concluídos? Você deseja incluir pedidos que por algum motivo não têm a identificação do cliente correspondente? Dependendo de suas respostas, você pode precisar usar LEFT JOIN, RIGHT JOIN, ou mesmo FULL JOIN.

Certifique-se de escolher o tipo apropriado de SQL JOIN e coloque os nomes das tabelas na ordem correta ao usar LEFT JOIN ou RIGHT JOIN.

3. Cuidadosamente projete a condição JOIN Condition

Se você estiver unindo duas tabelas usando sua respectiva chave primária e chave estrangeira, a condição de união é geralmente bastante simples. No entanto, nem sempre é este o caso:

  • Uma coluna comum pode não identificar exclusivamente os registros, caso em que você precisará usar duas ou mais condições de junção. Por exemplo, se você tem várias pessoas com o mesmo sobrenome em seu banco de dados, você não pode usar apenas o sobrenome para entrar nas tabelas. Você precisará procurar por outra coluna (por exemplo, ID) ou uma combinação de colunas. Veja como unir duas tabelas usando uma combinação de duas colunas (first_name e last_name) em ambas as tabelas:

    SELECT 
    s.first_name, 
    s.last_name, 
    u.id
    FROM students s
    JOIN users u
    ON s.first_name = u.first_name 
    AND s.last_name = u.last_name;
    
  • Você pode precisar aplicar uniões não-equi com operadores condicionais além dos iguais. Se você estiver verificando se o preço de uma casa está dentro das expectativas de preço dos compradores ao unir potenciais compradores com casas para venda, sua consulta seria algo parecido com isto:

    SELECT 
    	b.id, 
    	b.name, 
    	h.id, 
    	h.address, 
    	h.price
    FROM buyers b
    JOIN houses h
    	ON h.price BETWEEN b.min_price AND b.max_price;
    
  • Pode haver vários registros correspondentes em outra tabela (por exemplo, um cliente pode ter muitos pedidos). Você quer obter todos esses pedidos ou apenas o mais recente? Se você quiser se juntar apenas ao pedido mais recente, sua consulta será um pouco mais complexa:

    SELECT 
    	customers.id, 
    	customers.first_name, 
    	customers.last_name,
    	orders.order_date, 
    	orders.order_status
    FROM customers
    JOIN orders
        ON orders.id = (
            SELECT TOP 1 id
            FROM orders
            WHERE customer_id = customers.id
            ORDER BY order_date DESC
        )
    ORDER BY customer_id;
    

A definição de uma condição de junção correta é crucial para obter a saída correta após juntar tabelas em SQL.

4. Usar aliases de tabela

É uma boa prática usar pseudônimos de tabelas ao unir várias tabelas ou ao unir tabelas com nomes longos. Normalmente, o alias inclui simplesmente a primeira letra do nome completo da tabela ou duas e mais letras se o nome da tabela consistir de várias palavras (por exemplo, c para customersds para daily_salesetc.).

Voltando ao nosso exemplo, podemos usar a seguinte consulta para obter informações sobre o ID do cliente, nome, sobrenome, ID do pedido, data do pedido e status do pedido:

SELECT
	c.id,
	c.first_name,
	c.last_name,
	o.id,
	o.date,
	o.status
FROM customers c
JOIN orders o
	ON c.id = o.customer_id;

Observe que definimos os aliases da tabela nas cláusulas FROM e JOIN logo após o nome completo da tabela. Em seguida, usamos esses apelidos para nos referirmos a colunas específicas dessas tabelas nas declarações SELECT e ON. Isto pode nos poupar muita escrita, especialmente se os nomes das tabelas forem longos.

5. Usar pseudônimos de coluna

Aliases de colunas são os nomes que atribuímos às colunas no conjunto de resultados. Por padrão, as colunas de saída terão os mesmos nomes que as colunas correspondentes nas tabelas originais. No entanto, isto muitas vezes resulta em resultados confusos.

Por exemplo, a saída da consulta do nosso exemplo acima incluirá duas colunas com o id do nome que correspondem ao ID do cliente e colunas de ID do pedido.

idfirst_namelast_nameiddatestatus
11KateWhite1112021-10-05Awaiting shipment
12RoseParker1122021-10-05Awaiting payment
13WilliamSpencer1092021-10-04Completed
14JohnSmith1082021-10-04Completed

Você pode seguir a ordem das colunas para entender qual é qual, mas a melhor abordagem é usar pseudônimos de colunas:

SELECT
	c.id AS customer_id, 
	c.first_name, 
	c.last_name, 
	o.id AS order_id, 
	o.date AS order_date, 
	o.status AS order_status.
FROM customers c
JOIN orders o
	ON c.id = o.customer_id;
customer_idfirst_namelast_nameorder_idorder_dateorder_status
11KateWhite1112021-10-05Awaiting shipment
12RoseParker1122021-10-05Awaiting payment
13WilliamSpencer1092021-10-04Completed
14JohnSmith1082021-10-04Completed

Observe que também estou usando aliases de coluna para as colunas com data do pedido e status do pedido. Na tabela resultante, não está claro sobre o que são estas datas e status. Para evitar qualquer confusão, é melhor especificar os nomes das colunas explicitamente usando os aliases de coluna. Confira este artigo para mais dicas SQL JOIN.

Hora de Praticar Cláusulas JOIN em SQL!

SQL JOIN é uma das principais habilidades adquiridas por aqueles que começam a trabalhar com bancos de dados relacionais. Entretanto, há muito mais do que simples uniões envolvidas. Há muitas ferramentas e conceitos avançados sob o guarda-chuva Cláusulas JOIN em SQL , incluindo diferentes tipos de uniões externas, auto-ajustes, uniões não-equi, e muito mais.

É importante conhecer e utilizar Cláusulas JOIN em SQL melhores práticas desde o início:

  • Defina seu Cláusulas JOIN em SQL explicitamente com JOIN e ON palavras-chave.
  • Certifique-se de selecionar o tipo correto de SQL JOIN.
  • Cuidadosamente projete a condição de join.
  • Use pseudônimos de tabela, especialmente com nomes longos de tabela.
  • Use aliases de coluna para tornar a saída da consulta mais compreensível.

Os cursos interativos são geralmente a melhor abordagem para a prática das novas habilidades adquiridas. Se você é muito novo em SQL, eu recomendo começar com o SQL para Iniciantes curso. Ele lhe apresentará os principais tópicos do SQL, incluindo Cláusulas JOIN em SQL.

Para ter uma compreensão mais profunda dos diferentes tipos de JOIN, confira o Cláusulas JOIN em SQL curso. Ele cobre INNER JOIN, LEFT JOIN, RIGHT JOIN, e FULL JOIN; filtrar dados com diferentes tipos de JOINs; unir uma tabela consigo mesmo; unir tabelas em colunas não-chave, e muito mais.

Você gostou deste artigo? Nós publicamos muitos guias úteis e tutoriais práticos. Aqui está uma lista dos nossos 20 principais artigos do ano passado, se você quiser saber mais.

Obrigado por ler, e feliz aprendizado!