Considere uma tabela T, com uma única coluna A, definida como uma chave primária, e o comando SQL a seguir. delete from T where not exists (select * from T tt where T.A > tt.A) Dado que a tabela tem 100 linhas preenchidas, assinale a opção que indica o número de linhas que será deletado pela execução do referido comando.
- A)0.
Errada, porque o comando não preserva todas as linhas: ele encontra exatamente a linha de menor valor em A.
- B)1.
Certa, porque apenas a linha que não possui nenhuma outra com A menor satisfaz o NOT EXISTS.
- C)50.
Errada, pois não há metade das linhas sendo removidas; a condição identifica uma única linha específica.
- D)99.
Errada, porque o comando não apaga todas as linhas menos uma qualquer, e sim só a menor chave.
- E)100.
Errada, já que a subquery impede a exclusão das demais linhas e sobra apenas uma linha para deletar.
Gabarito: B
Aqui a ideia é olhar com calma para a subquery correlacionada. Para cada linha de T, o comando pergunta: existe alguma outra linha tt com valor de A menor do que o da linha atual? Se a resposta for "não", essa linha entra no DELETE. Traduzindo para português claro: o comando apaga a menor chave primária da tabela, isto é, a linha de menor valor em A. Como A é chave primária, não há repetição, então existe exatamente uma linha mínima. Com 100 linhas preenchidas, o comando deletará 1 linha. É por isso que o gabarito é a letra B. Em SQL, esse tipo de raciocínio com EXISTS e NOT EXISTS costuma ser cobrado para testar se voce enxerga a lógica do filtro, e não apenas a sintaxe.