Questão nº 64
Questão de Tecnologia da Informação · FGV MP-SC 2022 (nº 64)
Maria trabalha com um banco de dados onde há uma tabela T com linhas repetidas. Ela precisa remover as repetições indesejadas, porém mantendo as linhas sem repetição e apenas uma linha de cada conjunto de linhas repetidas, como mostrado a seguir.

Maria optou por usar o comando abaixo para realizar a tarefa.
delete from T where
exists (select * FROM T t1
where T.A = t1.A and T.B = t1.B
and T.C = t1.C)
Na execução desse comando, serão removidas:
- Aapenas uma linha pertencente a cada conjunto de linhas que contém linhas repetidas;
- Bapenas n-1 linhas pertencentes a cada conjunto que contém n linhas repetidas, onde n é um número par;
- Capenas n-1 linhas pertencentes a cada conjunto que contém n linhas repetidas, onde n é um número ímpar;
- Dtodas as linhas da tabela, exceto as linhas que não foram repetidas;
- Etodas as linhas da tabela, sem exceção. (alternativa correta)
Resposta comentada
Gabarito Alternativa E
O comando DELETE com subconsulta correlacionada compara cada linha da tabela T com todas as linhas da própria tabela (incluindo ela mesma). Como a condição T.A = t1.A AND T.B = t1.B AND T.C = t1.C é sempre verdadeira para a própria linha (pois ela é igual a si mesma), a subconsulta retorna pelo menos uma linha para toda linha da tabela. Portanto, o EXISTS é verdadeiro para todas as linhas, e o comando apaga tudo.
- (A) Incorreta: A condição não isola conjuntos repetidos; ela encontra a própria linha como correspondência, então não remove apenas uma por grupo.
- (B) Incorreta: Não há lógica de paridade (par/ímpar) na consulta; a subconsulta não filtra por
t1.ctidou qualquer chave que exclua a linha atual. - (C) Incorreta: Mesmo erro da B: a subconsulta não usa nenhum critério para diferenciar linhas repetidas, então não há contagem
nenvolvida. - (D) Incorreta: Linhas únicas também são apagadas, pois a subconsulta encontra a própria linha como correspondência (a linha é igual a si mesma).
- (E) Correta: Como a subconsulta correlacionada compara cada linha com ela mesma (sem excluir a linha atual),
EXISTSé sempre verdadeiro, apagando todas as linhas da tabela, sem exceção. A pegadinha é que, para remover duplicatas corretamente, seria necessário usart1.ctid <> T.ctid(ou uma chave única) na subconsulta, o que a banca omitiu de propósito.
Fonte: FGV MP-SC 2022 Analista em Tecnologia da Informação (Caderno Tipo 1). Reproduzida para fins de estudo.