Questão nº 62
Questão de Administração de Banco de Dados · FGV MPAL 2018 (nº 62)
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
- AII, somente. (alternativa correta)
- BI e III, somente.
- CI e IV, somente.
- DII e III, somente.
- EII e IV, somente.
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.