Questão nº 62

Questão de Administração de Banco de Dados · FGV MPAL 2018 (nº 62)

FGV2018Analista do Ministério Público - Administrador de Banco de DadosAdministração de Banco de Dados
Gabarito: Aver comentário ↓

Usar palavras reservadas para nomear objetos não é uma boa ideia, mas no MS SQL Server é possível usar palavras reservadas em certos objetos, desde que, por ocasião da utilização esses objetos, seus nomes sejam de forma especial.

Observe os dois comandos SQL a seguir.

```
select "having" from teste
where between <> 'between';

select [having] from teste
where [between] <> 'between';
```

Sobre esses comandos, analise as afirmativas a seguir.

I. O resultado do primeiro comando é sempre vazio.
II. O primeiro comando causa um erro de compilação.
III. O resultado do segundo comando é sempre vazio.
IV. O segundo comando causa um erro de compilação.

Está correto o que se afirma em

Resposta comentada

Gabarito Alternativa A

Conceito-chave: No MS SQL Server, palavras reservadas (como `HAVING` e `BETWEEN`) só podem ser usadas como nomes de colunas/tabelas se forem delimitadas com colchetes `[ ]` ou aspas duplas `" "` (quando `QUOTED_IDENTIFIER` está ON). Sem delimitador, o comando falha na compilação.

(A) Correta: O primeiro comando usa `"having"` e `"between"` sem colchetes — o SQL Server tenta interpretar `having` como cláusula e `between` como operador, gerando erro de sintaxe na compilação (não executa, não retorna vazio).

(B) Incorreta: O segundo comando usa `[having]` e `[between]` com colchetes, que são delimitadores válidos — o comando compila e executa, mas o resultado não é sempre vazio (depende dos dados da tabela `teste`; se houver linha onde `[between] <> 'between'`, retorna linhas).

(C) Incorreta: O primeiro comando não retorna vazio — ele nem chega a executar, pois falha na compilação (erro de sintaxe).

(D) Incorreta: O segundo comando não causa erro de compilação — colchetes são a forma correta de escapar palavras reservadas; o erro só ocorre no primeiro.

(E) Incorreta: O segundo comando compila normalmente (colchetes funcionam), então a afirmação IV é falsa; e o primeiro não retorna vazio, mas sim erro — logo II é verdadeira, mas IV não.

Armadilha da banca (distrator B): A pegadinha está em achar que `"having"` com aspas duplas funciona igual a `[having]`. No SQL Server, aspas duplas só funcionam se `QUOTED_IDENTIFIER` estiver ON (padrão), mas mesmo assim, `"having"` não é aceito como nome de coluna em `SELECT` sem delimitador de colchetes — a banca explora a confusão entre aspas (para strings) e colchetes (para identificadores). O resultado do segundo comando não é sempre vazio — depende dos dados; a banca tenta fazer você acreditar que `<> 'between'` sempre retorna vazio, mas isso só seria verdade se todos os valores fossem exatamente `'between'`, o que não é garantido.

Fonte: FGV MPAL 2018 Analista do Ministério Público - Administrador de Banco de Dados (Caderno Tipo 1). Reproduzida para fins de estudo.

Continue estudando

Estudar é izi

Pratique milhares de questões como esta, de graça, com explicação e gamificação no Quizinho.

Estudar de graça no Quizinho