Pular para o conteúdo principal

Questão de Banco de Dados — Consultas e Comandos em SQL — FUNDATEC 2024

Banco de DadosConsultas e Comandos em SQL
Código
qa630532
Banca
FUNDATEC
Órgão
Pref Criciúma
Ano
2024
Cargo
AFRM ( )

campo1

A

ABC
AA
AAAA
AAA
 

Qual consulta SQL NÃO gera erro e NÃO retorna registro algum?

  1. ASELECT * FROM taba WHERE 2=1
  2. BSELECT * FROM taba WHERE 2=2
  3. CSELECT * FROM taba WHERE campo1='A'
  4. DSELECT * FROM taba WHERE campo1 IN ('A')
  5. ESELECT * FROM taba WHERE campo1=campo1
Revelar gabarito e comentário

GabaritoA — SELECT * FROM taba WHERE 2=1

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

Consultas SQL: condições sempre verdadeiras e sempre falsas

Gabarito: letra A. A consulta SELECT * FROM taba WHERE 2=1 não gera erro porque a sintaxe é válida, mas a condição 2=1 é sempre falsa, de modo que nenhuma linha da tabela satisfaz o filtro e o resultado é vazio. As demais alternativas retornam registros: 2=2 é sempre verdadeira, campo1='A' e campo1 IN ('A') encontram a linha com valor 'A', e campo1=campo1 é verdadeira para todas as linhas (comparação de uma coluna com ela mesma).

A cláusula WHERE filtra linhas de acordo com uma condição lógica. Quando a condição é sempre verdadeira (como 2=2 ou campo1=campo1), todas as linhas da tabela são retornadas. Quando é sempre falsa (como 2=1), nenhuma linha é retornada — mas a consulta continua válida, sem erro de sintaxe ou de execução. Esse é um truque clássico para forçar um resultado vazio sem alterar a estrutura da consulta.

O operador IN verifica se o valor da coluna pertence a uma lista de valores. Na alternativa D, a lista contém apenas 'A', então é equivalente a campo1 = 'A' — e como existe uma linha com campo1 = 'A', ela será retornada. Já a alternativa C usa comparação direta com =, que também encontra essa linha.

A alternativa E compara campo1 com ele mesmo. Para qualquer valor não nulo, a comparação é verdadeira; para valores nulos, o resultado é NULL (desconhecido), que não é considerado verdadeiro no WHERE. Como a tabela do enunciado não contém valores nulos, todas as linhas são retornadas. Se houvesse nulos, eles seriam excluídos — mas ainda assim a consulta retornaria as demais linhas.

A pegadinha da questão está em reconhecer que 2=1 é uma condição sintaticamente válida e logicamente falsa, enquanto 2=2 é logicamente verdadeira. Muitos candidatos estranham a presença de constantes no WHERE, mas o SQL aceita qualquer expressão booleana — inclusive constantes — e o resultado depende apenas do valor lógico dela.

Guarde o critério: para não retornar registros, a condição do WHERE deve ser sempre falsa para todas as linhas da tabela. É exatamente isso que separa a alternativa A das demais.

1Sempre verdadeira
2=2
campo1=campo1
Retorna todas as linhas
2Sempre falsa
2=1
Retorna conjunto vazio
3Depende dos dados
campo1='A'
campo1 IN ('A')
Retorna linhas que satisfazem
Condição no WHERE
LEVELsoulevel.com.br
Condição no WHERE: Sempre verdadeira (2=2, campo1=campo1, Retorna todas as linhas); Sempre falsa (2=1, Retorna conjunto vazio); Depende dos dados (campo1='A', campo1 IN ('A'), Retorna linhas que satisfazem)

Alternativa A — ✅ Correta ⟵ GABARITO

A condição 2=1 é uma expressão booleana constante e sempre falsa. O SQL avalia a expressão e, como nenhuma linha satisfaz a condição, o resultado é um conjunto vazio. A consulta é perfeitamente válida — não há erro de sintaxe nem de execução. É a única alternativa que atende aos dois requisitos do enunciado: não gera erro e não retorna registro algum.

Alternativa B — ❌ Incorreta

A condição 2=2 é sempre verdadeira. Portanto, todas as linhas da tabela taba são retornadas. A consulta não gera erro, mas retorna todos os registros — o que contraria o pedido de "não retornar registro algum".

Alternativa C — ❌ Incorreta

A condição campo1='A' filtra as linhas cujo valor da coluna campo1 é exatamente 'A'. Como a tabela contém uma linha com esse valor (a primeira linha do enunciado), a consulta retorna pelo menos um registro. Logo, não atende ao requisito de não retornar nada.

Alternativa D — ❌ Incorreta

O operador IN verifica se o valor da coluna está na lista fornecida. Aqui, a lista contém apenas 'A', então a condição é equivalente a campo1 = 'A'. Como existe a linha com 'A', ela é retornada. A consulta não gera erro, mas retorna registros.

Alternativa E — ❌ Incorreta

A condição campo1=campo1 compara cada valor da coluna com ele mesmo. Para valores não nulos, a comparação é sempre verdadeira; para nulos, o resultado é NULL (desconhecido), que não passa no filtro. Como a tabela não tem nulos, todas as linhas são retornadas. Portanto, a consulta retorna todos os registros — não atende ao requisito.

Gabarito: letra A

Link permanente: /questoes/qa630532