0Pricing
SQL Interview Prep · Aula

CROSS JOIN e produtos cartesianos

Conheça junções cruzadas intencionais para gerar combinações e as acidentais que fazem a contagem de linhas explodir.

CROSS JOIN e produtos cartesianos é uma aula grátis de SQL Interview Prep no CoddyKit. Esta é a aula 1 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de SQL Interview Prep, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de SQL Interview Prep inclui 4 aulas no total.

A junção usada pelos entrevistadores para pegar você na armadilha

Um CROSS JOIN combina cada linha da tabela da esquerda com cada linha da tabela da direita. Não há condição ON. Se a tabela A tiver 4 linhas e a tabela B tiver 3 linhas, o resultado terá 4 x 3 = 12 linhas.

Isso é chamado de produto cartesiano. Os entrevistadores perguntam sobre ele por dois motivos: para verificar se você consegue gerar combinações deliberadamente e para saber se reconhece uma junção cruzada acidental que faz o conjunto de resultados crescer excessivamente.

Sintaxe explícita de CROSS JOIN

A forma moderna e legível de escrever um produto cartesiano é usar a palavra-chave explícita CROSS JOIN. Observe que não há uma cláusula ON, o que sinaliza claramente a intenção para quem revisa o código.

Aqui combinamos cada tamanho com cada cor para montar uma matriz completa de produtos.

SELECT s.size, c.color
FROM sizes s
CROSS JOIN colors c;

A antiga sintaxe com vírgula

Você ainda verá produtos cartesianos escritos com uma vírgula na cláusula FROM e sem condição de junção. Esta é a sintaxe legada da ANSI.

Ela produz exatamente o mesmo resultado que CROSS JOIN, mas é perigosa: se você pretendia adicionar uma condição de junção e se esqueceu, obterá silenciosamente uma junção cruzada em vez de um erro. Prefira CROSS JOIN explícita.

-- Same result as CROSS JOIN, but easy to write by accident
SELECT s.size, c.color
FROM sizes s, colors c;

Exemplo prático: criando uma tabela de tamanhos

Suponha que uma loja venda camisetas em 3 tamanhos e 4 cores e queira uma linha para cada variante possível, até mesmo as que ainda não estão em estoque. Uma junção cruzada gera todas as 12 combinações em uma única etapa.

Este é o uso intencional mais comum: produzir uma grade completa de opções.

SELECT s.size, c.color, 0 AS stock_qty
FROM sizes s
CROSS JOIN colors c
ORDER BY s.size, c.color;

Gerando uma grade de calendário

Outro uso clássico em entrevistas para CROSS JOIN: construir uma grade densa para que toda combinação esteja presente, mesmo quando faltam dados.

Aqui combinamos cada loja com cada data para que uma LEFT JOIN posterior às vendas forneça uma linha por loja e por dia, preenchendo as lacunas com zeros. A junção cruzada garante que nenhum par loja-dia seja ignorado.

SELECT st.store_id, d.day
FROM stores st
CROSS JOIN calendar d
WHERE d.day BETWEEN DATE '2024-01-01' AND DATE '2024-01-31';

A explosão cartesiana acidental

O perigo que os entrevistadores verificam: você faz uma junção entre duas tabelas, mas esquece a condição de junção. Em vez de retornar um erro, o banco de dados simplesmente devolve todas as combinações.

Se orders tiver 100.000 linhas e customers tiver 50.000, o resultado terá 5 bilhões de linhas. As consultas ficam travadas, a memória se esgota e os números parecem absurdamente inflados. Reconhecer esse padrão em uma revisão de código é um sinal positivo.

-- BUG: no join condition between the two tables
SELECT o.order_id, c.name
FROM orders o, customers c;
-- returns COUNT(orders) * COUNT(customers) rows

Como identificar uma junção cruzada acidental

Sintomas que os entrevistadores esperam que você saiba mencionar:

  • A quantidade de linhas é aproximadamente o produto dos tamanhos das duas tabelas, não a soma.
  • Agregações como SUM ficam infladas por um múltiplo constante.
  • O plano de execução mostra um laço aninhado sem filtro de junção.

A correção quase sempre é adicionar uma igualdade ausente em ON ou WHERE entre as tabelas.

CROSS JOIN versus INNER JOIN com ON sempre verdadeiro

Uma CROSS JOIN é logicamente idêntica a uma INNER JOIN ... ON 1=1. Ambas produzem o produto cartesiano completo.

Na verdade, uma junção interna é apenas uma junção cruzada seguida de um filtro na condição ON. Esse modelo mental explica por que uma condição ausente reduz uma junção interna a uma junção cruzada.

-- These two queries return identical results
SELECT * FROM a CROSS JOIN b;
SELECT * FROM a INNER JOIN b ON 1 = 1;

Usando CROSS JOIN com uma tabela de números

Um truque poderoso: faça uma operação CROSS JOIN com uma pequena tabela numbers ou generate_series para multiplicar linhas de propósito. Isso é usado para expandir uma única linha em várias, por exemplo, transformando uma quantidade em linhas de unidades individuais.

Aqui cada linha de produto é repetida qty vezes ao fazer a junção com uma série e manter os números até a quantidade.

SELECT p.product_id, n.n AS unit_number
FROM products p
CROSS JOIN generate_series(1, 100) AS n(n)
WHERE n.n <= p.qty;

Desempenho e prática segura

Como a saída cresce multiplicativamente, nunca faça uma operação CROSS JOIN entre duas tabelas grandes. Mantenha pelo menos um dos lados pequeno (uma lista de tamanhos, um calendário pequeno ou uma tabela de números).

Em entrevistas, declare isso explicitamente: 'Uma operação CROSS JOIN só é segura quando um dos lados é pequeno e limitado; caso contrário, o resultado fica impossível de gerenciar.' Essa frase demonstra bom senso, não apenas conhecimento de sintaxe.

Quando usar CROSS JOIN

Use uma operação CROSS JOIN deliberadamente quando precisar de todas as combinações de dois conjuntos:

  • Gerar matrizes de opções (tamanho x cor).
  • Tornar séries temporais densas (loja x dia) antes de uma LEFT JOIN.
  • Expandir linhas por meio de uma tabela de números.

Se você não quiser todas as combinações, quase certamente precisará de uma junção com uma condição ON.

Verificação rápida

Teste sua compreensão dos produtos cartesianos.

Recapitulação: CROSS JOIN

Principais conclusões:

  • Uma CROSS JOIN combina cada linha da esquerda com cada linha da direita; o tamanho da saída é o produto das entradas.
  • A sintaxe com vírgula sem condição produz o mesmo produto cartesiano, muitas vezes por acidente.
  • Use-a intencionalmente para grades de combinações, densificação de séries temporais e expansão de linhas por meio de uma tabela de números.
  • Uma junção interna com um ON ausente se degrada silenciosamente para uma junção cruzada, o erro de explosão que os entrevistadores adoram.

Perguntas Frequentes

A aula “CROSS JOIN e produtos cartesianos” é grátis?

Sim — o texto completo de “CROSS JOIN e produtos cartesianos” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de SQL Interview Prep, atualize para CoddyKit PRO. O curso de SQL Interview Prep inclui 4 aulas no total.

O que vou aprender em “CROSS JOIN e produtos cartesianos”?

Conheça junções cruzadas intencionais para gerar combinações e as acidentais que fazem a contagem de linhas explodir. Você pratica SQL Interview Prep com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar SQL Interview Prep?

Nenhuma experiência prévia é necessária. SQL Interview Prep no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 1 de 4.

Quanto tempo leva a aula “CROSS JOIN e produtos cartesianos”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de SQL Interview Prep?

Sim. Cada aula de SQL Interview Prep inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. CROSS JOIN e produtos cartesianos
  2. SELF JOIN para hierarquias
  3. Comparando linhas dentro de uma tabela
  4. Escolhendo o tipo correto de junção
← Voltar para SQL Interview Prep