Por uma questão de integridade, estou respondendo ao meu e vinculando a outro pergunta de minha autoria. Parece que este comportamento é uma consequência direta do padrão SQL permitindo espaços em branco entre a função e parênteses.
Uma vez que é (geralmente) permitido dizer FUNCTION_NAME (x) então quando esta função é aplicada a um primeiro termo de select
SELECT FUNCTION_NAME (x)
então o analisador terá dificuldade em estabelecer se este é um contexto de um nome de função ou uma palavra-chave modificadora de SELECT.
Portanto, no caso acima, FUNCTION_NAME é, na verdade, FUNCTION_NAME_OR_KEYWORD para o analisador.
Mas vai além:como o espaço entre o nome da função e os parênteses é permitido, o analisador NÃO pode distinguir entre
SELECT FUNCTION_NAME_OR_KEYWORD (x)
e
SELECT FUNCTION_NAME_OR_KEYWORD(x)
(ele deve testar as palavras-chave para ver se elas são funções), e como (x) será analisado para x, segue que para FUNCTION_NAME_OR_KEYWORD -> DISTINCT (e todas as outras palavras-chave que modificam SELECT) não há diferença entre
SELECT DISTINCT x, y, z, ...
e
SELECT DISTINCT(x), y, z, ...
QED, mas sem referências concretas (supondo que padrão não se importa com espaços em branco entre nomes de funções e parênteses é, acredito, justificado, mas não consegui seguir a gramática BNF a ponto de poder citar a regra exata).
NOTA:o mysql tem um certo número de funções onde se preocupa com o espaço em branco entre funções e parênteses, mas acredito que sejam exceções (daí a opção do servidor para ignorá-lo)