← Questões de Banco de Dados

Banco de Dados · FGV · 2021

Questão comentada de Banco de Dados

Considere o comando SQL a seguir, executado num banco de dados relacional com duas tabelas, R1 e R2, contendo 2.000 e 5.000 registros, respectivamente. R1 e R2 possuem chaves primárias definidas. SELECT DISTINCT * FROM A, B Assinale o número de linhas produzidas na execução.

Gabarito: E

Aqui o ponto-chave é lembrar que, em SQL, escrever `FROM A, B` sem condição de junção gera uma junção cartesiana. Isso significa que cada linha de A combina com cada linha de B. Como A tem 2.000 registros e B tem 5.000, o resultado bruto tem 2.000 x 5.000 = 10.000.000 linhas. O `DISTINCT` não muda esse total neste caso, porque ele elimina linhas repetidas, e aqui cada combinação entre uma linha de A e uma de B é diferente. Como as tabelas têm chaves primárias, cada registro é identificável de forma única, então não há duplicação a ser removida entre as combinações formadas. Em outras palavras: primeiro vem o produto cartesiano, depois o `DISTINCT` tenta limpar duplicatas. Só que não tem duplicata para limpar. Por isso o resultado continua com 10 milhões de linhas. Esse é um clássico de prova da FGV: ela adora testar se você enxerga que vírgula no `FROM` é junção cartesiana e que `DISTINCT` não faz mágica, só remove repetidos. Resultado final: 10.000.000 linhas.

Continue treinando

Questões relacionadas