Como usar JOIN com mais de uma condição?

Podemos utilizar múltiplas condições em um JOIN no SQL combinando colunas diferentes ou aplicando operadores lógicos como AND e OR.

Como usar JOIN com mais de uma condição?

Em SQL, podemos aplicar múltiplas condições dentro de um JOIN, utilizando operadores como AND e OR para refinar a junção entre tabelas.

Usando JOIN com múltiplas condições (AND)

Se quisermos unir tabelas baseando-se em mais de um critério, podemos utilizar AND dentro da cláusula ON:

SELECT pedidos.id, clientes.nome, pedidos.valor 
FROM pedidos 
INNER JOIN clientes ON pedidos.cliente_id = clientes.id AND pedidos.status = 'confirmado';

Aqui, a junção ocorre apenas para pedidos confirmados, garantindo que clientes só apareçam se atenderem a ambas as condições.

Usando JOIN com múltiplas condições (OR)

Se quisermos unir registros que satisfaçam qualquer uma das condições, podemos usar OR:

SELECT pedidos.id, clientes.nome, pedidos.valor 
FROM pedidos 
INNER JOIN clientes ON pedidos.cliente_id = clientes.id OR pedidos.valor > 500;

Essa consulta traz todos os pedidos vinculados a clientes e também os pedidos acima de R$500, mesmo sem um cliente associado.

Filtrando dentro do JOIN ou no WHERE?

Podemos incluir condições no JOIN ou no WHERE. A diferença principal é:

  • Filtrar no JOIN restringe os dados durante a junção.
  • Filtrar no WHERE mantém a junção completa, aplicando a condição depois.

Exemplo de filtragem no WHERE:

SELECT pedidos.id, clientes.nome, pedidos.valor 
FROM pedidos 
INNER JOIN clientes ON pedidos.cliente_id = clientes.id 
WHERE pedidos.status = 'confirmado';

Aqui, todos os pedidos são unidos primeiro, e só depois os não confirmados são removidos.

Usando JOIN com BETWEEN, IN e LIKE

Também podemos utilizar outras condições dentro do JOIN, como BETWEEN, IN e LIKE:

SELECT pedidos.id, clientes.nome, pedidos.valor 
FROM pedidos 
INNER JOIN clientes ON pedidos.cliente_id = clientes.id AND pedidos.data BETWEEN '2024-01-01' AND '2024-02-01';

Isso garante que apenas pedidos feitos em janeiro de 2024 sejam considerados na junção.

O uso de múltiplas condições em JOINs no SQL é essencial para consultas avançadas, permitindo refinar as junções de acordo com critérios específicos. Em sistemas financeiros, por exemplo, pode ser necessário unir transações e clientes apenas quando os valores forem acima de um determinado limite e a conta estiver ativa. Já em e-commerces, a combinação de critérios ajuda a gerar relatórios detalhados, como vendas por período e status de pagamento. Escolher entre usar AND, OR e outras condições impacta diretamente na performance da consulta e na qualidade dos resultados.

Algumas aplicações:

  • Filtrar pedidos e clientes apenas quando atendem a múltiplos critérios
  • Relacionar funcionários e departamentos aplicando restrições extras
  • Unir dados de vendas considerando intervalos de tempo específicos
  • Combinar informações de usuários e interações com regras detalhadas
  • Melhorar a precisão de relatórios ao incluir condições avançadas

Dicas para quem está começando

  • Use AND para restringir registros que atendam a todas as condições
  • Prefira OR quando precisar incluir registros que satisfaçam qualquer uma das condições
  • Se houver muitas condições, considere testar a consulta com EXPLAIN para otimização
  • Evite funções nas colunas do JOIN, pois podem impactar a performance
  • Quando possível, utilize índices nas colunas utilizadas na junção para melhor desempenho
Foto de Rodrigo Martins
Contribuições de
Rodrigo Martins

Especialista em bancos de dados SQL e otimização de consultas para aplicações críticas.

Mais sobre o autor
Compartilhe este tutorial: Como usar JOIN com mais de uma condição?

Compartilhe este tutorial

Continue aprendendo:

Como otimizar consultas que usam JOINs pesados?

JOINs pesados podem impactar a performance do SQL. Para otimizá-los, utilizamos índices, filtragem antecipada e análise de execução.

Tutorial anterior

Como usar GROUP BY para agrupar resultados no SQL?

O GROUP BY no SQL permite agrupar registros com base em valores comuns de uma coluna, possibilitando cálculos agregados como COUNT, SUM e AVG.

Próximo tutorial