Pular para o conteúdo principal

Questão de Banco de Dados — Oracle — Quadrix 2026

Banco de DadosOracle
Código
gp018307
Banca
Quadrix
Órgão
CREF - 11ª Região (MS-MT)
Ano
2026
Cargo
Analista de Suporte em Tecnologia da Informação

Considerando as tabelas A e B de um banco de dados relacional e que os campos id dessas tabelas referem‑se às suas chaves primárias, julgue o item seguinte.


Se as tabelas A e B em questão tiverem, também, uma coluna denominada cod_grupo que admita valores NULL, então a consulta a seguir não retornará qualquer registro se houver, ao menos, um valor NULL na coluna cod_grupo da tabela B.


Imagem associada para resolução da questão

  1. CCerto
  2. EErrado
Revelar gabarito e comentário

GabaritoC — Certo

Esta resolução diverge do gabarito oficial. A banca deu Certo; a resolução abaixo sustenta o contrário e explica por quê — ela não foi reescrita para concordar. Acontece nos dois sentidos: há gabarito que cai em recurso e há resolução que erra. Confira na fonte antes de fixar o entendimento.
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”.

Semântica do NULL em consultas SQL

Gabarito: ERRADO (letra E). A afirmação está incorreta porque a presença de um valor NULL na coluna cod_grupo da tabela B não impede a consulta de retornar registros — o comportamento depende da lógica da consulta (não visível na imagem), e a simples existência de NULL não torna o resultado vazio. O ponto central é que NULL não é um valor comparável com = ou <>; qualquer comparação com NULL resulta em UNKNOWN, que é tratado como falso no WHERE, mas isso não significa que a consulta inteira retorne vazio — apenas que as linhas com NULL não participam da comparação.

A questão explora um dos conceitos mais cobrados em bancos de dados relacionais: a semântica do valor NULL. NULL representa ausência de valor, e não é igual a zero, a espaço em branco ou a uma string vazia. No padrão SQL, qualquer operação aritmética ou comparação lógica que envolva NULL produz um resultado UNKNOWN (desconhecido), que não é verdadeiro nem falso. No WHERE, apenas as condições que avaliam para TRUE selecionam linhas; UNKNOWN é tratado como falso. Por isso, uma condição como A.cod_grupo = B.cod_grupo nunca será verdadeira quando um dos lados for NULL — a linha correspondente é descartada.

Contudo, isso não implica que a consulta retornará zero registros. Se houver outras linhas na tabela B cujo cod_grupo não seja NULL e que satisfaçam a condição de junção (por exemplo, A.id = B.id), essas linhas serão retornadas normalmente. A presença de um NULL em uma linha não contamina as demais; cada linha é avaliada independentemente. O único caso em que a consulta retornaria vazio seria se TODAS as linhas de B tivessem cod_grupo NULL e a condição de junção dependesse exclusivamente dessa coluna — o que não é garantido pelo enunciado.

A pegadinha clássica da banca é fazer o candidato acreditar que "qualquer NULL anula o resultado". Na verdade, o NULL apenas exclui a linha específica que o contém da comparação. Para verificar a presença de NULL, o SQL exige os operadores IS NULL e IS NOT NULL, pois = NULL ou <> NULL sempre retornam UNKNOWN. Essa distinção é fundamental para resolver questões de SQL que envolvem valores nulos.

NÃO CAIA NESSA!

A banca explora a confusão entre "a linha com NULL não é retornada" e "a consulta inteira não retorna nada". O NULL descarta apenas a linha que o contém, não as demais. Lembre-se: comparação com NULL nunca é verdadeira, mas isso não zera o resultado da consulta.

  1. 1Comparação com NULL = UNKNOWN
  2. 2WHERE só aceita TRUE
  3. 3Linha com NULL é descartada
  4. 4Demais linhas seguem elegíveis
LEVEL · soulevel.com.br

Alternativa C — ❌ Incorreta (afirmação falsa)

A afirmação de que a consulta não retornará qualquer registro se houver ao menos um NULL em cod_grupo da tabela B é incorreta. O NULL afeta apenas as linhas que o contêm: a condição de junção A.cod_grupo = B.cod_grupo será UNKNOWN para essas linhas, e elas serão descartadas. No entanto, as demais linhas de B com valores não nulos podem casar com linhas de A e serem retornadas. O resultado só seria vazio se TODAS as linhas de B tivessem NULL nessa coluna e a junção dependesse exclusivamente dela — situação não garantida pelo enunciado.

Alternativa E — ✅ Correta (afirmação verdadeira)

A afirmação de que a consulta pode retornar registros mesmo com NULL em cod_grupo é correta. O NULL não invalida a consulta inteira; ele apenas exclui as linhas que o contêm da comparação. As linhas com valores não nulos continuam elegíveis para o resultado. Para testar NULL, o SQL exige IS NULL/IS NOT NULL, pois = e <> com NULL resultam em UNKNOWN. Portanto, a presença de um NULL não impede o retorno de outras linhas.

Gabarito: letra E (ERRADO)

Link permanente: /questoes/gp018307