Pular para o conteúdo principal

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

Banco de DadosSQL
Código
fg063594
Banca
FGV
Órgão
DPE-RS
Ano
2023
Nível
Superior
Cargo
Analista - Área de Apoio Especializado - Tecnologia da Informação - Banco de Dados

Tabela R1


Na questão a seguir, considere a tabela R1, cuja instância é exibida a seguir. 

Imagem da questão

Com referência à tabela R1, como descrita anteriormente, analise o comando SQL a seguir.update R1set B=0where C in (31,32) or C = nullO conjunto completo de linhas afetadas pela execução desse comando é:
  1. Aa primeira e a terceira;
  2. Ba segunda e a quarta;
  3. Ca terceira e a quinta;
  4. Da primeira, a segunda e a quarta;
  5. Ea segunda, a terceira e a quinta.
Revelar gabarito e comentário

GabaritoD — a primeira, a segunda e a quarta;

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

SQL: UPDATE com condição NULL

Gabarito: letra D — o comando UPDATE afeta as linhas em que C é 31 ou 32, ou em que C é NULL. Como a condição C = NULL nunca é verdadeira (NULL não é um valor comparável), apenas as linhas com C igual a 31 ou 32 são atualizadas. Na tabela R1, essas são a primeira, a segunda e a quarta linhas.

O comando UPDATE é um comando DML (Data Manipulation Language) usado para modificar dados existentes em uma tabela. Sua sintaxe básica é UPDATE nome_da_tabela SET coluna = valor WHERE condição. A cláusula WHERE define quais linhas serão afetadas; sem ela, todas as linhas seriam atualizadas.

A condição WHERE C in (31,32) or C = null combina duas condições com o operador lógico OR. A primeira, C in (31,32), é verdadeira para linhas onde C é 31 ou 32. A segunda, C = null, é a armadilha central da questão.

Em SQL, NULL representa um valor desconhecido ou inexistente. Qualquer comparação com NULL (como =, <, >, <>) resulta em UNKNOWN, que não é verdadeiro nem falso. Portanto, C = NULL nunca é verdadeira, mesmo para linhas onde C é efetivamente NULL. Para testar a presença de NULL, deve-se usar IS NULL ou IS NOT NULL.

Como a condição usa OR, a linha é afetada se qualquer uma das condições for verdadeira. Como a segunda condição nunca é verdadeira, apenas as linhas que satisfazem a primeira condição (C em 31 ou 32) são atualizadas.

Na tabela R1, as linhas com C igual a 31 ou 32 são a primeira (C=31), a segunda (C=32) e a quarta (C=31). A terceira e a quinta linhas têm C igual a NULL e 5, respectivamente, e não são afetadas.

NÃO CAIA NESSA!

A banca tenta fazer o candidato acreditar que C = NULL seleciona linhas com valor nulo. Isso é um erro clássico: NULL não é um valor, e comparações com ele sempre resultam em UNKNOWN. A forma correta de testar nulos é IS NULL. Aqui, a condição C = NULL é sempre falsa, então apenas as linhas com C em (31, 32) são afetadas.

  1. 1C in (31,32)
  2. 2C = NULL (sempre UNKNOWN)
  3. 3OR: só 1ª condição vale
  4. 4Afeta linhas 1, 2 e 4
LEVEL · soulevel.com.br

Alternativa A — ❌ Incorreta

Afirma que apenas a primeira e a terceira linhas são afetadas. A terceira linha tem C igual a NULL, e a condição C = NULL não a seleciona. A primeira linha (C=31) é afetada, mas a segunda (C=32) e a quarta (C=31) também deveriam ser.

Alternativa B — ❌ Incorreta

Afirma que apenas a segunda e a quarta linhas são afetadas. A segunda (C=32) e a quarta (C=31) são afetadas, mas a primeira (C=31) também deveria ser, pois C é 31, que está na lista (31, 32).

Alternativa C — ❌ Incorreta

Afirma que apenas a terceira e a quinta linhas são afetadas. A terceira linha tem C igual a NULL, e a quinta tem C igual a 5. Nenhuma delas satisfaz C in (31,32), e a condição C = NULL não as seleciona. Portanto, nenhuma dessas linhas é afetada.

Alternativa D — ✅ Correta ⟵ GABARITO

A primeira (C=31), a segunda (C=32) e a quarta (C=31) linhas têm C na lista (31, 32), satisfazendo a primeira condição do WHERE. A condição C = NULL é sempre falsa, então não adiciona nenhuma linha. Portanto, o conjunto completo de linhas afetadas é a primeira, a segunda e a quarta.

Alternativa E — ❌ Incorreta

Afirma que a segunda, a terceira e a quinta linhas são afetadas. A terceira (C=NULL) e a quinta (C=5) não satisfazem C in (31,32), e a condição C = NULL não as seleciona. A segunda (C=32) é afetada, mas a primeira (C=31) e a quarta (C=31) também deveriam ser.

Gabarito: letra D

Link permanente: /questoes/fg063594