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.
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 é:
Aa primeira e a terceira;
Ba segunda e a quarta;
Ca terceira e a quinta;
Da primeira, a segunda e a quarta;
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.
1C in (31,32)
2C = NULL (sempre UNKNOWN)
3OR: só 1ª condição vale
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.