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

Alternativa correta: B - 1.

Para entender essa questão, precisamos nos aprofundar um pouco no funcionamento do comando DELETE em SQL, juntamente com a cláusula WHERE e a expressão NOT EXISTS. O comando DELETE é utilizado para remover registros de uma tabela que satisfaçam uma condição específica. A cláusula WHERE especifica essa condição. Já a expressão NOT EXISTS é usada em subconsultas e serve para verificar a existência de registros que satisfaçam uma determinada condição.

No caso em questão, a subconsulta está comparando cada valor da coluna A da tabela principal T com todos os outros valores da mesma coluna na mesma tabela (renomeada como tt para diferenciação na subconsulta). O critério dado na subconsulta é que T.A deve ser maior que tt.A.

O efeito dessa consulta é que se não existir nenhum valor na coluna A que seja menor que o valor corrente de A, então o registro correpondente ao valor corrente será deletado. A única linha que satisfaz essa condição é a linha que contém o maior valor de A, porque não haverá nenhum outro valor maior que ele na tabela T. Como consequência, apenas essa linha será deletada.

Dado que a tabela tem 100 linhas, após a execução do comando, teremos 99 linhas remanescentes, pois apenas a linha com o maior valor de A terá sido removida. Portanto, a resposta correta é que apenas 1 linha será deletada.

Assim, a alternativa B está correta porque reflete o comportamento do comando SQL apresentado, que é remover somente a linha com o maior valor na coluna A, que é a chave primária e, portanto, contém valores únicos.

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