Olá, pessoal.
Como DBA sempre buscando conhecimento, acho muito importante trazer um ponto importantíssimo.
Em algumas aulas do curso (até agora, vi nas aulas "Consultando dados de uma tabela" e "Limitando a saída da consulta") o professor está passando uma informação incorreta.
Nelas, o professor afirma que no SQL Server não há distinção de maiúsculas e minúsculas no nome dos campos, tabelas e comandos como SELECT. Acontece que isso não é completamente verdade.
De fato os comandos SQL (SELECT, UPDATE, INSERT, FROM, CREATE, etc) são Case Insensitive (não diferenciam maiúsculas e minúsculas), isto é, realizar um SELECT * FROM tabela, vai retornar a mesma coisa que SeLecT * FRom tabela. Mas o mesmo não se pode dizer das tabelas e campos.
Quando se cria um banco de dados, na etapa Server Configuration (Configuração do Servidor), há uma aba chamada Colação (Collation). Lá, é possível escolher a colação do servidor, que é um conjunto de regras que determina como os dados são comparados e ordenados em um banco de dados.
Quando instalamos uma instância do SQL Server, por padrão (de acordo com nossa localização do Brasil) é instalado no formato SQL_Latin1_General_CP1_CI_AS. Mas o que isso quer dizer? Isso significa o seguinte:
- SQL: Indica que esta collation é específica para o SQL Server;
- Latin1_General: Refere-se ao conjunto de caracteres utilizado. Neste caso, é baseado no conjunto de caracteres Latin1 (também conhecido como ISO 8859-1), que inclui caracteres alfanuméricos básicos, acentos e alguns caracteres especiais;
- CP1: Indica a página de código (code page) utilizada. A página de código 1 (CP1) é a página de código padrão associada ao conjunto de caracteres Latin1;
- CI: Significa "Case Insensitive", o que indica que a collation é insensível a maiúsculas e minúsculas. Isso significa que a ordenação e comparação de strings não levarão em conta a diferença entre maiúsculas e minúsculas;
- AS: Significa "Accent Sensitive", o que indica que a collation é sensível a acentos. Portanto, a ordenação e comparação de strings levarão em consideração a diferença entre caracteres acentuados e não acentuados;
Portanto, de fato com a configuração padrão (a SQL_Latin1_General_CP1_CI_AS), as tabelas e colunas se tornam Case Insensitive, isto é, as tabelas CONSUMO e Consumo e consumo são referem-se à mesma tabela. Mas se for escolhido a versão SQL_Latin1_General_CP1_CS_AS, os nomes das tabelas e colunas serão Case Sensitive, isto é, a tabela CONSUMO é diferente da tabela consumo e diferente da tabela Consumo (tu pode ter uma tabela chamada CONSUMO, outra Consumo e outra consumo).
Explicando o Accent Sensitive, é a mesma lógica para acentos. O Accent Sensitive indica que a palavra maçã é diferente da maça que é diferente da macã e diferente da maca para a buca, por exemplo. Se fosse Accent Insensitive, então uma busca por maca irá retornar resultados como maçã, maça, macã e maca, por exemplo.
Acho muito importante especificar e deixar isso muito claro.