Per completezza, rispondo da solo e mi collego a un altro domanda di mio. Sembra che questo comportamento sia una diretta conseguenza dello standard SQL che consente spazi bianchi tra la funzione e le parentesi.
Poiché è (generalmente) consentito dire FUNCTION_NAME (x), quando questa funzione viene applicata a un primo termine di select
SELECT FUNCTION_NAME (x)
allora il parser avrà difficoltà a stabilire se questo è un contesto di un nome di funzione o una parola chiave di modifica SELECT.
Quindi, nel caso precedente, FUNCTION_NAME è in realtà FUNCTION_NAME_OR_KEYWORD per il parser.
Ma va oltre:poiché lo spazio tra il nome della funzione e la parentesi È consentito, il parser in realtà NON può distinguere tra
SELECT FUNCTION_NAME_OR_KEYWORD (x)
e
SELECT FUNCTION_NAME_OR_KEYWORD(x)
(deve testare le parole chiave per vedere se sono funzioni), e poiché (x) verrà analizzato in x ne consegue che per FUNCTION_NAME_OR_KEYWORD -> DISTINCT (e tutte le altre parole chiave di modifica SELECT) non c'è differenza tra
SELECT DISTINCT x, y, z, ...
e
SELECT DISTINCT(x), y, z, ...
QED, ma senza riferimenti concreti (supponendo che standard non mi interessa lo spazio bianco tra i nomi delle funzioni e le parentesi è, credo, giustificato, ma non sono stato in grado di seguire la grammatica BNF al punto da poter citare la regola esatta).
NOTA:mysql ha un certo numero di funzioni in cui si preoccupa degli spazi bianchi tra le funzioni e le parentesi, ma credo che queste siano eccezioni (quindi l'opzione del server per ignorarlo)