Considere uma tabela T, com uma única coluna A, definida com...

Próximas questões
Com base no mesmo assunto
Q2234120 Banco de Dados
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.
Alternativas

Gabarito comentado

Confira o gabarito comentado por um dos nossos professores

Gabarito: B

Fundamento decisivo: O trecho decisivo é "delete from T where not exists (select * from T tt where T.A > tt.A)" com A definida como chave primária. Pela semântica de NOT EXISTS em subconsulta correlacionada, a linha externa só é excluída quando não há nenhum tt.A menor que o seu valor; como a chave primária garante unicidade, isso ocorre apenas para a menor linha da tabela.

Tema central: NOT EXISTS correlacionado
Análise das alternativas
A
Errada
Está errada porque o resultado não pode ser zero em uma tabela não vazia: sempre existe pelo menos uma linha sem nenhum valor de A menor do que o seu, que é a linha de menor chave. Para essa linha, a subconsulta não retorna registros e o NOT EXISTS é verdadeiro.
B
Certa
A alternativa B está correta porque a condição elimina somente a linha que não encontra nenhum registro com valor menor de A. Como A é chave primária, essa menor linha é única, então exatamente 1 linha é deletada.
C
Errada
Está errada porque a condição não seleciona metade da tabela nem depende proporcionalmente da quantidade total de linhas. O predicado é lógico e identifica apenas a linha que não possui nenhum tt.A menor, isto é, o mínimo da coluna A.
D
Errada
Está errada porque 99 linhas seriam deletadas se a lógica fosse a inversa, isto é, se bastasse existir algum valor menor para a linha ser excluída. Mas o comando usa NOT EXISTS, de modo que as 99 linhas que não são a menor terão a subconsulta satisfeita e, por isso, não serão deletadas.
E
Errada
Está errada porque nem todas as linhas satisfazem NOT EXISTS. Para qualquer linha que não seja a menor, existe ao menos um tt.A menor, a subconsulta retorna linha e o predicado fica falso. Logo, não há exclusão total da tabela.
Pegadinha da questão
A confusão real é inverter a leitura de T.A > tt.A ou esquecer que a subconsulta é correlacionada e reavaliada para cada linha externa, concluindo erroneamente que a maior linha, quase todas as linhas ou todas as linhas seriam deletadas.
Dica para questões semelhantes
  • Em subconsulta correlacionada, leia a condição sempre do ponto de vista da linha externa atual.
  • Em EXISTS/NOT EXISTS, primeiro descubra quando a subconsulta retorna pelo menos uma linha; só depois conclua o efeito do predicado externo.
  • Se houver chave primária no atributo comparado, use a unicidade para definir se o resultado pode atingir uma ou mais linhas.

Clique para visualizar este gabarito

Visualize o gabarito desta questão clicando no botão abaixo

Comentários

Veja os comentários dos nossos alunos

Chave primária: a coluna não tem valores repetidos.

NOT EXISTS: retorna verdadeiro, quando a query  (select * from T tt where T.A > tt.A) não retornar valor. Esse caso acontece somente com o número 1, pois ele é o único da tabela que não será maior que ninguém. A partir do número 2 por exemplo, já teremos um valor verdadeiro, pois 2 > 1.

Assim, apenas a 1 linha será deletada, a que corresponde ao número 1.

GAB.: LETRA 'B'

Acho que o examinador fica pensando assim: "Vou fazer uma questão com um comando que ninguém experiente e profissional nunca faria na vida, e vou lascar a cabeça de qualquer pessoa normal com algo que não faz sentido algum para um DBA".

o not exists procura a excecao do criterio. como dito, tratand de pk, so o 1 reg nao sera maior d q nenhum outro.

esse 1 registr é a excecao

No início fiquei confuso com as explicações do pessoal, afinal a chave primária também pode ser uma string.... Mas no final vai dar na mesma quando usar o critério de ordem crescente em string.

https://www.qconcursos.com/questoes-de-concursos/questoes/014175f0-f4

Como que a banca FGV tem entendimentos diferentes para questões com o mesmo conceito em concursos diferentes? Usando o mesmo embasamento do gabarito da questão acima, não deveria excluir nenhuma linha pois fere o princípio:

Uma subconsulta em uma instrução DELETE não pode recuperar dados da mesma tabela da qual dados devem ser excluídos.

Clique para visualizar este comentário

Visualize os comentários desta questão clicando no botão abaixo