Pular para o conteúdo principal

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

Banco de DadosSQL
Código
fg071512
Banca
FGV
Órgão
TCE-SP
Ano
2023
Nível
Superior
Cargo
Agente da Fiscalização - TI
Com referência às tabelas TX e TY, como descritas anteriormente, analise o comando SQL a seguir.insert into TX(A, B)select C,A FROM TYwhere C not in (select A from TX)or A in (select A from TX)O conjunto de linhas inseridas é:
  1. Avazio;
  2. B0, NULL;
  3. C2, NULL e 3, NULL;
  4. D5, NULL e 6, NULL;
  5. E6, NULL.
Revelar gabarito e comentário

GabaritoD — 5, NULL e 6, NULL;

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”.

Inserção com subconsultas em SQL

Gabarito: letra D. O comando insert into TX(A,B) select C,A from TY where C not in (select A from TX) or A in (select A from TX) insere apenas as linhas de TY onde C não está entre os valores de A em TX ou A está entre esses valores. Avaliando cada linha de TY, apenas aquelas com C=5 e C=6 satisfazem a primeira condição (C not in {1,2,3,4}), gerando as tuplas (5, NULL) e (6, NULL).

A banca testa o entendimento de operadores lógicos com NULL e a ordem de avaliação da condição OR. Vamos detalhar.

Alternativa A — ❌ Incorreta

Afirma que o conjunto inserido é vazio. Na verdade, há duas linhas que atendem à condição (C=5 e C=6), portanto o resultado não é vazio.

Alternativa B — ❌ Incorreta

Traz (0, NULL). A linha de TY com C=1, A=0 não é inserida porque C=1 está no subquery (select A from TX) e A=0 não está, resultando em false OR false = false.

Alternativa C — ❌ Incorreta

Aponta (2, NULL) e (3, NULL). Essas linhas têm C=2 e C=3, que pertencem ao conjunto {1,2,3,4}, então a primeira condição é falsa. A segunda condição (A in ...) é UNKNOWN porque A é NULL, e UNKNOWN é considerado falso no WHERE. Assim, não são inseridas.

Alternativa D — ✅ Correta ⟵ GABARITO

A linha com C=5, A=NULL e C=6, A=NULL satisfazem C not in (select A from TX) (5 e 6 não estão em {1,2,3,4}). A segunda condição é irrelevante (OR). Portanto, as tuplas (5, NULL) e (6, NULL) são inseridas.

Alternativa E — ❌ Incorreta

Apenas (6, NULL) – esquece a linha com C=5, que também atende à condição.

NÃO CAIA NESSA!

O erro comum é não considerar que a comparação com NULL no IN ou NOT IN gera UNKNOWN, e que OR com UNKNOWN pode ser verdadeiro se uma das partes for verdadeira. No caso, C not in (select A from TX) é verdadeiro para C=5 e C=6, independentemente de NULL na segunda condição.

Gabarito: letra D

Link permanente: /questoes/fg071512