Pular para o conteúdo principal

Questão de Banco de Dados — Banco de Dados — FGV 2023

Banco de DadosBanco 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. 



Imagem da questão

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 é:
  1. Anulo, pois nenhuma linha é removida;
  2. Ba remoção da primeira e da segunda linhas, somente;
  3. Ca remoção da primeira e da terceira linhas, somente;
  4. Da remoção da segunda e da terceira linhas, somente;
  5. 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.

Gabarito: letra E — a remoção de todas as linhas.

Link permanente: /questoes/fg072602