Caio preparou o comando SQL exibido a seguir para deletar um conjunto de linhas de uma tabela. delete from T1 where exists(select * from T2 where T1.A1 = T2.A2) Para testar seu comando e descobrir exatamente quais seriam as linhas deletadas, Caio pretende executar um comando sem alteração de dados que permita a identificação dessas linhas. Para isso, basta que Caio substitua no comando original o termo:
- A)“=” por “<>”;
Errada, porque trocar '=' por '<>' inverte a condição de comparação e muda completamente quais linhas seriam selecionadas ou deletadas.
- B)“delete from” por “show deleted rows from”;
Errada, porque 'show deleted rows from' não é sintaxe SQL padrão, então o comando nem seria válido.
- C)“delete” por “delete limit 0”;
Errada, porque 'delete limit 0' não é uma forma padrão de transformar a exclusão em consulta sem alteração de dados.
- D)“delete” por “select *”;
Certa, porque substituir 'delete' por 'select *' faz o banco apenas retornar as linhas que atenderiam à condição, sem apagar nada.
- E)“exists” por “not exists”.
Errada, porque trocar 'exists' por 'not exists' inverte a lógica do filtro e seleciona o conjunto oposto de linhas.
Gabarito: D
A ideia da questão é simples: quando você quer descobrir quais linhas seriam afetadas por um DELETE, você troca a ação de remoção por uma consulta que apenas mostre os registros. Em SQL, o comando SELECT serve exatamente para isso: retornar linhas sem alterar dados. Assim, o teste fica seguro, porque você enxerga o conjunto que seria atingido antes de apagar qualquer coisa. No comando dado, a cláusula WHERE EXISTS filtra as linhas de T1 que possuem correspondência em T2, isto é, aquelas em que T1.A1 = T2.A2 para pelo menos uma linha de T2. Se você substituir DELETE por SELECT *, o banco não apaga nada e apenas lista as linhas de T1 que satisfazem a condição. É exatamente isso que Caio quer para conferir o resultado. As outras trocas tentam mexer na lógica da condição ou inventam sintaxe que não existe no SQL padrão. Isso muda o conjunto retornado, ou simplesmente gera erro de comando. Em prova, a banca costuma explorar essa diferença entre comando de consulta e comando de manipulação de dados: SELECT mostra, DELETE altera. Então o gabarito é a alternativa D, porque ela transforma o comando de exclusão em uma consulta equivalente para visualização das linhas atingidas, sem modificar os dados.