Tipos de JOIN no MySQL
Gabarito: letra C — sequência V – V – F – V – F. As três primeiras assertivas descrevem corretamente o INNER JOIN, o LEFT JOIN e o CROSS JOIN; a quarta é verdadeira porque RIGHT JOIN e LEFT JOIN são simétricos quando se invertem as tabelas; e a quinta é falsa, pois a ausência de correspondência no RIGHT JOIN preenche os campos da tabela à esquerda com NULL, não com valores padrão como zero.
A cláusula JOIN é o mecanismo da linguagem SQL para combinar registros de duas ou mais tabelas com base em uma coluna comum, correspondendo à operação de junção da álgebra relacional. Cada tipo de JOIN define um comportamento distinto quanto aos registros que aparecem no resultado e como as linhas sem correspondência são tratadas. Compreender essas diferenças é essencial para escrever consultas corretas e para responder questões de concurso, que frequentemente exploram exatamente as sutilezas de cada variação.
O INNER JOIN, também chamado apenas de JOIN, retorna somente as linhas que possuem valores correspondentes em ambas as tabelas, ou seja, a interseção entre elas. É o tipo mais comum e o comportamento padrão quando se usa a palavra JOIN sem qualificador. Já o LEFT JOIN (ou LEFT OUTER JOIN) preserva todos os registros da tabela à esquerda, preenchendo com NULL os campos da tabela à direita quando não há correspondência. O RIGHT JOIN (ou RIGHT OUTER JOIN) faz o oposto: preserva todos os registros da tabela à direita e preenche com NULL os campos da tabela à esquerda. O CROSS JOIN, por sua vez, é o produto cartesiano entre as tabelas, combinando cada linha de uma com todas as linhas da outra, sem aplicar nenhum predicado de junção.
Uma distinção importante é que o CROSS JOIN, quando usado com uma cláusula ON, comporta-se como um INNER JOIN — a condição filtra as combinações do produto cartesiano. Isso é exatamente o que a terceira assertiva afirma, e por isso ela é verdadeira. Já a quinta assertiva contém um erro clássico: quando não há correspondência em um RIGHT JOIN, os campos da tabela à esquerda são preenchidos com NULL, não com valores padrão como zero. O NULL é o marcador universal de ausência de valor em SQL, e é ele que aparece nas junções externas quando não há par correspondente.
A pegadinha que a banca explora aqui é a confusão entre o comportamento do RIGHT JOIN e do LEFT JOIN, e a ideia incorreta de que valores padrão (como zero) seriam usados no lugar de NULL. O candidato que não domina a semântica das junções externas tende a marcar a quinta assertiva como verdadeira, caindo na armadilha. Para acertar, é preciso lembrar que NULL é o valor que representa a ausência de dado, e é ele que preenche os campos sem correspondência em qualquer junção externa.
Critério | INNER JOIN | LEFT JOIN | RIGHT JOIN | CROSS JOIN |
|---|
O que retorna | Só linhas com correspondência em ambas | Todas da esquerda + correspondentes da direita | Todas da direita + correspondentes da esquerda | Produto cartesiano (todas as combinações) |
Sem correspondência | Linha excluída | Campos da direita = NULL | Campos da esquerda = NULL | Não se aplica (não há condição) |
Uso de ON | Obrigatório (condição de junção) | Obrigatório | Obrigatório | Não usa (com ON vira INNER) |
Relação com o outro | — | Equivale ao RIGHT com tabelas invertidas | Equivale ao LEFT com tabelas invertidas | — |
Assertiva 1 — ✅ Verdadeira
O INNER JOIN retorna apenas os registros que possuem correspondência em ambas as tabelas, conforme a condição estabelecida. Isso é exatamente a definição de interseção entre as tabelas: somente as linhas que satisfazem o predicado da cláusula ON aparecem no resultado. É o tipo de junção mais utilizado e o comportamento padrão quando se escreve apenas JOIN. A assertiva está correta.
Assertiva 2 — ✅ Verdadeira
O LEFT JOIN garante a exibição de todos os registros da tabela à esquerda, mesmo que não haja correspondência na tabela à direita. Quando não há par, os campos da tabela à direita são preenchidos com NULL. Essa é a definição precisa do LEFT OUTER JOIN: preserva todas as linhas da tabela da esquerda e traz os dados correspondentes da direita quando existem, preenchendo com NULL quando não existem. A assertiva está correta.
Assertiva 3 — ❌ Falsa
A operação CROSS JOIN pode ser usada com cláusula ON para limitar o número de combinações geradas, funcionando de forma semelhante a um INNER JOIN. Na verdade, o CROSS JOIN é o produto cartesiano puro, sem nenhum predicado de junção. Quando se adiciona uma cláusula ON, o comportamento se torna equivalente ao de um INNER JOIN, mas isso não é uma característica do CROSS JOIN em si — é uma consequência de se aplicar uma condição de filtro. A assertiva está incorreta porque descreve o CROSS JOIN como se ele naturalmente aceitasse ON para limitar combinações, quando na verdade o CROSS JOIN não usa ON; se usado, vira um INNER JOIN.
Assertiva 4 — ✅ Verdadeira
O RIGHT JOIN produz os mesmos resultados que um LEFT JOIN, desde que as posições das tabelas sejam invertidas corretamente. Isso é verdade: RIGHT JOIN e LEFT JOIN são simétricos. Se você tem TabelaA LEFT JOIN TabelaB, o resultado é o mesmo de TabelaB RIGHT JOIN TabelaA. A diferença está apenas em qual tabela é preservada integralmente. A assertiva está correta.
Assertiva 5 — ❌ Falsa
Quando não há correspondência no RIGHT JOIN, os valores da tabela à esquerda serão substituídos por valores padrão (por exemplo, zero), e não por NULL. Isso é falso. Em qualquer junção externa (LEFT, RIGHT ou FULL), quando não há correspondência, os campos da tabela que não tem par são preenchidos com NULL, não com valores padrão como zero. O NULL é o marcador universal de ausência de valor em SQL. A assertiva está incorreta.
Gabarito: letra C — sequência V – V – F – V – F.