Uma tabela de banco de dados denominada TTT, com atributos A...

Próximas questões
Com base no mesmo assunto
Q873281 Banco de Dados
Uma tabela de banco de dados denominada TTT, com atributos A, B e C, contém em sua instância sete registros, com os seguintes valores: 1,2,1 2,3,4 5,4,4 8,7,5 4,3,2 2,3,4 4,3,2
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:
Alternativas

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.

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