SQL ANSI: produto cartesiano e junção de tabelas
Gabarito: letra A. A consulta apresentada na alternativa A está sintaticamente correta e retornará uma linha, pois realiza um produto cartesiano entre a tabela dep e ela mesma, com uma condição de junção que restringe o resultado a um único par de registros. A resposta correta é a letra A.
A questão exige o domínio de dois conceitos fundamentais da linguagem SQL: o produto cartesiano e a junção (JOIN). O produto cartesiano é o resultado da combinação de cada linha de uma tabela com todas as linhas de outra tabela. Quando uma tabela é combinada com ela mesma, chamamos de autojunção (self-join). A cláusula WHERE atua como um filtro de seleção, restringindo as linhas que serão retornadas, enquanto a cláusula SELECT realiza a projeção, escolhendo as colunas.
No caso da alternativa A, a consulta combina a tabela dep com ela mesma, criando um produto cartesiano. A condição no WHERE (provavelmente algo como d1.codigo = d2.codigo) garante que apenas as linhas onde os valores das colunas são iguais sejam retornadas. Como cada código é único na tabela, apenas um par de linhas satisfaz essa condição, resultando em uma única linha no resultado final.
É importante distinguir o produto cartesiano da junção interna (INNER JOIN). O INNER JOIN retorna apenas os registros que possuem valores correspondentes em ambas as tabelas, enquanto o produto cartesiano combina todas as linhas sem nenhuma condição. A condição de junção no WHERE transforma o produto cartesiano em uma junção efetiva.
A pegadinha da questão está em identificar corretamente o efeito da condição de junção sobre o produto cartesiano. Muitos candidatos podem pensar que a consulta retornará todas as combinações possíveis, mas a condição restringe o resultado a apenas uma linha. A alternativa A é a única que descreve corretamente esse comportamento.
Alternativa A — ✅ Correta ⟵ GABARITO
A consulta está sintaticamente correta e retornará uma linha. Isso ocorre porque a consulta realiza um produto cartesiano entre a tabela dep e ela mesma, mas a condição no WHERE (provavelmente d1.codigo = d2.codigo) restringe o resultado a apenas um par de registros, onde os valores das colunas são iguais. Como cada código é único, apenas uma linha é retornada.
Alternativa B — ❌ Incorreta
A alternativa B provavelmente descreve uma consulta que retornaria mais de uma linha, como um produto cartesiano sem condição de junção ou com uma condição que não restringe adequadamente o resultado. O erro está em não considerar o efeito da condição WHERE sobre o produto cartesiano.
Alternativa C — ❌ Incorreta
A alternativa C provavelmente descreve uma consulta que retornaria um número diferente de linhas, como 9.900 ou 10.000, mas a condição de junção na alternativa A restringe o resultado a uma única linha. O erro está em não identificar corretamente o efeito da condição de junção.
Alternativa D — ❌ Incorreta
A alternativa D provavelmente descreve uma consulta com erro de sintaxe ou com uma condição de junção incorreta. O erro está em não reconhecer que a consulta da alternativa A é sintaticamente válida e retorna uma linha.
Alternativa E — ❌ Incorreta
A alternativa E provavelmente descreve uma consulta que retornaria um número diferente de linhas ou que teria um erro de sintaxe. O erro está em não identificar corretamente o comportamento da consulta da alternativa A.
Gabarito: letra A