Questão de Banco de Dados — SQL — FGV 2024
- Código
- fg076997
- Banca
- FGV
- Órgão
- CGE-PB
- Ano
- 2024
- Nível
- Superior
- Cargo
- Auditor de Contas Públicas - Auditoria de Tecnologia da Informação
- A0;
- B1;
- C2;
- D3;
- E4.
GabaritoA — 0;
Gabarito: letra A (0 linhas deletadas). O comando delete from T2 where P not in (select P from T2) tenta excluir linhas de T2 cujo valor de P não esteja presente no conjunto de valores de P da mesma tabela. Contudo, a subconsulta retorna um valor NULL (último registro de T2), e conforme a lógica de três valores do SQL, qualquer comparação com NULL na lista de valores de um NOT IN resulta em UNKNOWN (desconhecido), nunca TRUE. Portanto, nenhuma linha atende à condição e zero linhas são deletadas.
A questão exige conhecimento sobre o tratamento de NULL em subconsultas com NOT IN. O mecanismo do banco de dados considera NULL como valor desconhecido, e a presença de ao menos um NULL na lista anula a possibilidade de a condição ser verdadeira para qualquer linha.
O número de linhas deletadas é 0. Como explicado, a presença do NULL na subconsulta faz com que nenhuma linha satisfaça a condição WHERE P NOT IN (subconsulta). Nem mesmo as linhas com P = NULL seriam deletadas, pois a comparação NULL NOT IN (lista com NULL) também resulta em UNKNOWN.
Afirma que 1 linha seria deletada. Se não houvesse NULL, a única linha com P = 20 (que não aparece em T2? Na verdade, P=20 aparece uma vez? Na tabela T2, os valores de P são: 2, 40, 20, 10 e NULL. Todos os valores não nulos aparecem no conjunto, então mesmo sem NULL, nenhuma linha seria excluída. A presença do NULL garante que 0 seja o resultado.
Afirma que 2 linhas seriam deletadas. Não há fundamento para esse número, já que a condição nunca é verdadeira.
Afirma que 3 linhas seriam deletadas. Idem.
Afirma que 4 linhas seriam deletadas. Idem.
O candidato pode esquecer que NOT IN se comporta de forma diferente quando a subconsulta contém NULL. Muitos assumem que a condição excluiria as linhas cujo P não aparece, mas na prática nenhuma linha é excluída porque a presença de um único NULL torna toda a comparação desconhecida. Lembre-se: para NOT IN funcionar sem surpresas, a subconsulta não deve conter NULL. Sempre desconfie quando houver valores nulos envolvidos.
Gabarito: letra A.
Link permanente: /questoes/fg076997