Questão de Banco de Dados — Consultas e Comandos em SQL — FUNDATEC 2024
Banco de Dados›Consultas 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?
ASELECT * FROM taba WHERE 2=1
BSELECT * FROM taba WHERE 2=2
CSELECT * FROM taba WHERE campo1='A'
DSELECT * FROM taba WHERE campo1 IN ('A')
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.
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.