Questão de Banco de Dados — Banco de Dados — FGV 2023
Banco de Dados›Banco de Dados
Código
fg072602
Banca
FGV
Órgão
TJ-SE
Ano
2023
Nível
Superior
Cargo
Analista Judiciário - Especialidade - Análise de Sistemas - Banco de Dados
Considere as tabelas T1 e T2, exibidas abaixo com suas
respectivas instâncias.
Analise o comando a seguir quando aplicado à tabela T1, anteriormente descrita.delete from T1where A >= (select min(A) from T1)and A <= (select max(A) from T1)O efeito desse comando sobre a tabela T1 é:
Anulo, pois nenhuma linha é removida;
Ba remoção da primeira e da segunda linhas, somente;
Ca remoção da primeira e da terceira linhas, somente;
Da remoção da segunda e da terceira linhas, somente;
Ea remoção de todas as linhas.
Revelar gabarito e comentário▾
GabaritoE — a remoção de todas as linhas.
Comentário gerado por IA. É um apoio ao estudo, ancorado em fontes, mas pode conter imprecisões — confira sempre na fonte oficial (lei, súmula, edital e gabarito da banca). Encontrou um erro? Use “Reportar”.
DELETE com subconsulta MIN/MAX: remoção de todas as linhas
Gabarito: letra E. O comando DELETE remove todas as linhas de T1, pois a condição A >= (SELECT MIN(A) FROM T1) AND A <= (SELECT MAX(A) FROM T1) é verdadeira para qualquer valor de A — todo valor é, ao mesmo tempo, maior ou igual ao mínimo e menor ou igual ao máximo da própria coluna. A pegadinha está em não perceber que a subconsulta é avaliada uma única vez, antes da exclusão, e não linha a linha.
O que a questão realmente testa
O comando DELETE com subconsulta no WHERE é um clássico de prova. A primeira coisa a entender é a ordem de execução: a subconsulta (SELECT MIN(A) FROM T1) e (SELECT MAX(A) FROM T1) são avaliadas antes de qualquer linha ser removida. Elas retornam, respectivamente, o menor e o maior valor presente na coluna A da tabela no momento da execução.
Depois, a condição do WHERE é aplicada a cada linha da tabela. Para uma linha qualquer, o valor de A é comparado com esses dois extremos. A pergunta que decide a questão é: existe algum valor de A que seja menor que o mínimo ou maior que o máximo? A resposta é não — por definição, o mínimo é o menor valor e o máximo é o maior. Portanto, toda linha satisfaz a condição A >= MIN(A) AND A <= MAX(A) e será removida.
Vamos ver com um exemplo concreto. Suponha que T1 tenha os seguintes valores em A: 10, 20, 30, 40. O MIN(A) é 10 e o MAX(A) é 40. A condição vira A >= 10 AND A <= 40. Aplicando a cada linha:
10 >= 10 AND 10 <= 40 → verdadeiro → remove
20 >= 10 AND 20 <= 40 → verdadeiro → remove
30 >= 10 AND 30 <= 40 → verdadeiro → remove
40 >= 10 AND 40 <= 40 → verdadeiro → remove
Todas as linhas são removidas. O mesmo raciocínio vale para qualquer tabela, independentemente dos valores.
A pegadinha: o que a banca quer que você erre
A banca explora a confusão entre subconsulta avaliada uma vez e subconsulta avaliada linha a linha. Se a subconsulta fosse avaliada a cada linha (como em uma subconsulta correlacionada), o MIN e o MAX mudariam a cada remoção, e o efeito seria diferente. Mas aqui a subconsulta é não correlacionada — ela não referencia a linha atual —, então é avaliada uma única vez, antes do DELETE começar.
Outra pegadinha comum é pensar que a condição A >= MIN(A) excluiria o próprio mínimo, ou que A <= MAX(A) excluiria o próprio máximo. Mas os operadores são >= e <= (maior ou igual e menor ou igual), então os valores extremos são incluídos na remoção.
NÃO CAIA NESSA!
A banca tenta fazer o candidato acreditar que a subconsulta é avaliada linha a linha, o que levaria a uma remoção parcial. Mas a subconsulta MIN/MAX é avaliada uma única vez, antes do DELETE. Além disso, os operadores >= e <= incluem os valores extremos, então todas as linhas são removidas. Fique atento: se a subconsulta fosse correlacionada (referenciasse a linha atual), o resultado seria diferente.
Análise das alternativas
Alternativa A — ❌ Incorreta
Afirma que nenhuma linha é removida. Isso só seria verdade se a condição do WHERE fosse falsa para todas as linhas, o que não ocorre. A condição A >= MIN(A) AND A <= MAX(A) é verdadeira para todas as linhas, pois todo valor está entre o mínimo e o máximo da própria coluna. A alternativa confunde a condição com uma que nunca é satisfeita (como A > MAX(A)), mas aqui os operadores >= e <= garantem a inclusão de todos os valores.
Alternativa B — ❌ Incorreta
Afirma que apenas a primeira e a segunda linhas são removidas. Isso seria o resultado se a condição fosse, por exemplo, A <= (SELECT MIN(A) FROM T1) — que removeria apenas as linhas com o valor mínimo. Mas a condição usa >= e <= simultaneamente, abrangendo todo o intervalo de valores. A alternativa ignora que a condição é verdadeira para todas as linhas, não apenas para algumas.
Alternativa C — ❌ Incorreta
Afirma que apenas a primeira e a terceira linhas são removidas. Não há nenhuma lógica na condição que selecione linhas específicas por posição. A condição A >= MIN(A) AND A <= MAX(A) não depende da ordem das linhas, mas apenas do valor de A em relação aos extremos. Como todos os valores estão entre o mínimo e o máximo, todas as linhas são removidas, não apenas duas.
Alternativa D — ❌ Incorreta
Afirma que apenas a segunda e a terceira linhas são removidas. Assim como a alternativa C, não há base para selecionar linhas específicas. A condição é verdadeira para todas as linhas, pois todo valor de A é maior ou igual ao mínimo e menor ou igual ao máximo. A alternativa confunde a condição com uma que selecionaria apenas valores intermediários, mas a condição inclui também os extremos.
Alternativa E — ✅ Correta ⟵ GABARITO
A condição A >= (SELECT MIN(A) FROM T1) AND A <= (SELECT MAX(A) FROM T1) é verdadeira para todas as linhas da tabela. A subconsulta retorna o menor e o maior valor de A, e todo valor de A está entre esses dois extremos. Portanto, o DELETE remove todas as linhas da tabela T1. A alternativa está correta porque reconhece que a condição abrange o intervalo completo de valores.