Considere uma tabela relacional com uma coluna, intitulada ...
“São Paulo”, “Rio de Janeiro”, “Manaus”, “Sao Paulo”, “Manaus”, dispostas uma em cada linha.
A execução dos comandos SQL
SELECT Cidade FROM Locations where Cidade COLLATE Latin1_General_CI_AI in ('São Paulo','Rio de Janeiro', 'MANAUS')
SELECT Cidade FROM Locations where Cidade COLLATE Latin1_General_CI_AS in ('São Paulo','Rio de Janeiro', 'MANAUS')
SELECT Cidade FROM Locations where Cidade COLLATE Latin1_General_CS_AI in ('São Paulo','Rio de Janeiro', 'MANAUS')
no MS SQL Server produz resultados que, além da linha de títulos, contêm, respectivamente:
COLLATE - especifica o conjunto de caracteres e regras que está sendo utilizado na consulta
LATIN1 - define o charset
CS - especifica como Case Sensitive
AI - especifica como accent insensitive
CI - case insensitive
AS - accent sensitive
BIN - ordem de classificação binária
A última retornará Manaus?? ele pesquisa MANAUS, e define CS (Case Sensitive)
Aplicando o que o Celso explicou acima:
SELECT Cidade FROM Locations where Cidade COLLATE Latin1_General_CI_AI in ('São Paulo','Rio de Janeiro', 'MANAUS') retorna todos os 5 registros, porque a consulta não é sensível a maiúsculas/minúsculas nem a acentos;
SELECT Cidade FROM Locations where Cidade COLLATE Latin1_General_CI_AS in ('São Paulo','Rio de Janeiro', 'MANAUS') retorna 4 registros: São Paulo, Rio de Janeiro, Manaus e Manaus. Não retorna Sao Paulo porque a consulta é sensível a acentos.
SELECT Cidade FROM Locations where Cidade COLLATE Latin1_General_CS_AI in ('São Paulo','Rio de Janeiro', 'MANAUS') retorna 3 registros: São Paulo, Sao Paulo e Rio de Janeiro. Não retorna Manaus e Manaus porque a consulta é sensível a maiúsculas/minúsculas.
GABARITO: E
Reparem que no enunciado a cidade de São Paulo aparece duas vezes, uma com São (com acento) outra com Sao (sem acento).
Alternativa correta: E - 5, 4 e 3 linhas.
Para resolver esta questão, é necessário compreender o conceito de COLLATE no SQL Server, que é usado para definir regras de comparação de caracteres em operações como seleção e ordenação de dados. As opções de COLLATE especificadas determinam se as comparações são sensíveis à caixa (maiúsculas/minúsculas) e acentos.
Os sufixos utilizados, CI, AI, CS e AS, significam:
- CI: Case Insensitive (não sensível a maiúsculas e minúsculas)
- AI: Accent Insensitive (não sensível a acentos)
- CS: Case Sensitive (sensível a maiúsculas e minúsculas)
- AS: Accent Sensitive (sensível a acentos)
No primeiro SELECT com COLLATE Latin1_General_CI_AI, a busca é insensível tanto a maiúsculas e minúsculas quanto a acentos. Assim, as entradas "São Paulo", "Sao Paulo" e "MANAUS" (em diferentes combinações de caixa) são encontradas. No total, 5 linhas correspondem à condição.
No segundo SELECT com COLLATE Latin1_General_CI_AS, a busca é insensível a maiúsculas e minúsculas, mas sensível a acentos. Isso significa que "MANAUS" será encontrada independente da caixa, mas "Sao Paulo" não será considerada igual a "São Paulo" por causa do acento. Assim, 4 linhas correspondem à condição.
Já no terceiro SELECT com COLLATE Latin1_General_CS_AI, a busca é sensível a maiúsculas e minúsculas, mas insensível a acentos. "MANAUS" só será encontrada se estiver em caixa alta, e "São Paulo" será considerada igual a "Sao Paulo". Desse modo, 3 linhas correspondem à condição.
Portanto, a alternativa E - 5, 4 e 3 linhas está correta, porque reflete as quantidades de linhas encontradas pelos SELECTs de acordo com as regras de comparação de caracteres estabelecidas pelos três COLLATEs utilizados.