Ele vem dos padrões sql originais, que por meio de várias camadas de indireção eventualmente chegam a um início do identificador bloco, que é uma das várias coisas, mas principalmente é "uma simples letra latina". Existem outras coisas também que podem ser usadas, mas se você quiser ver todos os detalhes, vá para http://en.wikipedia.org/wiki/SQL-92 e siga os links para o padrão real ( página 85 )
Ter introdutores de identificadores não numéricos torna a escrita de um analisador para decodificar sql para execução mais fácil e rápida, mas um formulário entre aspas também é bom.
Editar:Por que é mais fácil para o analisador?
O problema para um analisador é mais no
SELECT
-list cláusula do que o FROM
cláusula. A lista de seleção é a lista de expressões que são selecionadas das tabelas, e isso é muito flexível, permitindo nomes de colunas simples e expressões numéricas. Considere o seguinte:SELECT 2e2 + 3.4 FROM ...
Se os nomes das tabelas e os nomes das colunas puderem começar com números, é
2e2
um nome de coluna ou um número válido (e
formato é normalmente permitido em literais numéricos) e é 3.4
a tabela "3
" e coluna "4
" ou é o valor numérico 3.4
? Ter a regra de que identificadores começar com letras latinas simples (e algumas outras coisas específicas) significa que um analisador que vê
2e2
pode discernir rapidamente que isso será uma expressão numérica, o mesmo com 3.4
Embora seja possível criar um esquema para permitir caracteres numéricos à esquerda, isso pode levar a regras ainda mais obscuras (opinião), portanto, essa regra é uma boa solução. Se você permitisse dígitos primeiro, sempre precisaria de aspas, o que provavelmente não é tão 'limpo'.
Isenção de responsabilidade , simplifiquei um pouco o acima, ignorando os nomes de correlação para mantê-lo curto. Não estou totalmente familiarizado com o postgres, mas verifiquei a resposta acima em relação à documentação do Oracle RDB e às especificações do sql