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 a opção que indica o número de linhas produzidas na execução.
- A)1
Errada, porque o comando não retorna uma única linha, e sim todas as combinações entre as duas tabelas.
- B)2.000
Errada, porque 2.000 é apenas a quantidade de linhas de R1, não o resultado da combinação com R2.
- C)5.000
Errada, porque 5.000 é apenas a quantidade de linhas de R2, não o total produzido pela consulta.
- D)7.000
Errada, porque 7.000 seria uma soma simples, mas aqui a operação é multiplicação por produto cartesiano.
- E)10.000.000
Certa, porque 2.000 vezes 5.000 gera 10.000.000 combinações, e o DISTINCT não elimina essas linhas distintas.
Gabarito: E
Aqui a palavra-chave é a vírgula no FROM: em SQL, isso significa junção implícita sem condição de ligação, ou seja, produto cartesiano. Se a tabela R1 tem 2.000 linhas e a R2 tem 5.000, o banco combina cada linha de uma com cada linha da outra. Resultado: 2.000 x 5.000 = 10.000.000 linhas. O DISTINCT não “corta” esse número aqui, porque ele só remove linhas exatamente iguais. Como as tabelas têm chaves primárias, cada combinação de uma linha de R1 com uma de R2 gera um registro distinto. Então não há repetição para ser eliminada. Em provas, a banca adora essa pegadinha: muita gente olha o DISTINCT e imagina que o resultado vai diminuir automaticamente. Não vai. Primeiro você produz o produto cartesiano; depois, se houver duplicidade real, o DISTINCT elimina. Neste caso, ele não reduz nada. Por isso, o gabarito é E: 10.000.000 linhas.