Uma tabela de banco de dados denominada TTT, com atributos A...
O número de registros removidos pela execução do comando delete from TTT where exists (select * FROM TTT t2 where TTT.a = t2.a and TTT.b = t2.b) seria:
Gabarito comentado
Confira o gabarito comentado por um dos nossos professores
Alternativa correta: E - 7.
O comando DELETE é utilizado em SQL para remover registros de uma tabela. O comando especificado na questão está fazendo uso de uma subconsulta com a cláusula EXISTS, que verifica a existência de registros com base em uma condição. A subconsulta compara os valores dos atributos A e B da tabela principal com os da subconsulta, que é um reflexo da mesma tabela (TTT).
Neste caso, a condição da subconsulta sempre será verdadeira para todos os registros, pois cada linha terá correspondência com ela mesma na subconsulta. Portanto, a cláusula WHERE EXISTS retornará verdadeiro para todos os registros da tabela principal.
Como resultado, o comando DELETE irá remover todos os registros da tabela, uma vez que cada um deles satisfaz a condição estabelecida na subconsulta. Como a tabela contém sete registros, todos os sete serão removidos, o que justifica a alternativa E - 7 ser a correta.
Para resolver esta questão, é necessário entender os conceitos de subqueries, a cláusula EXISTS e o funcionamento do comando DELETE em SQL. Compreendendo o comportamento desses elementos, fica claro que a condição do WHERE EXISTS será atendida por todos os registros, resultando na exclusão de cada um deles.
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
Essa questão pede um pouquinho de fosfato nosso. Como sabemos, o uso de SUBSELECT pode ser feito dentro do SELECT, e que neste caso, o SUBSELECT deveria estar amarrado com o SELECT de fora. Essa amarração geralmente se faz pela PK e serve para garantir que o SUBSELECT só retorne registros que estejam amarrados pela chave PK. Vamos pensar assim: O Subselect não pode ser executado sozinho e o select de fora não pode ser executado sozinho, isso traria resultados diferentes, por isso amarramos com a PK, como? A PK do subselect tem que ser igual a PK do select de fora. Simples, né?
Na questão, ele está fazendo a mesma coisa, ele está amarrando a coluna A e a coluna B de dentro com a coluna A e B de fora. Como sabemos que o EXISTS retorna TRUE se o select retornar linhas, então podemos concluir que se ele amarrou a chave de dentro com a chave de fora, ele sempre irá retornar registros, logo o EXISTS retornará TRUE e o DELETE ocorrerá na tabela TODA!
Com o EXISTS toda a comparação verdadeira do where trás o resultado para o delete realizar a sua função.
Só olhando as alternativas daria para responder bem rápido. Como tem um exist dentro do delete, então a resposta poderia ser todos os registros ou nenhum, já que o exists retorna falso ou true.
Cuidado, gente. Tem muito comentário errado nessa questão.
O motivo de ter deletado todos é porque está sendo comparado 2 tabelas iguais, portanto, um registro de uma tabela será igual a ele mesmo na outra tabela.
o EXISTS, além de testar se a condição é verdadeira, traz como retorno os dados da consulta.
Clique para visualizar este comentário
Visualize os comentários desta questão clicando no botão abaixo