Ze względu na kompletność odpowiadam na własne i linkuję do innego pytanie moje własne. Wygląda na to, że to zachowanie jest bezpośrednią konsekwencją standardu SQL pozwalającego na odstępy między funkcją a nawiasem.
Ponieważ można (ogólnie) powiedzieć FUNCTION_NAME (x), to gdy ta funkcja zostanie zastosowana do pierwszego warunku wyboru
SELECT FUNCTION_NAME (x)
wtedy parser będzie miał trudności z ustaleniem, czy jest to kontekst nazwy funkcji, czy słowa kluczowego modyfikującego SELECT.
Tak więc w powyższym przypadku FUNCTION_NAME jest w rzeczywistości FUNCTION_NAME_OR_KEYWORD dla parsera.
Ale to idzie dalej:ponieważ spacja między nazwą funkcji a nawiasem JEST dozwolona, parser faktycznie NIE może rozróżnić
SELECT FUNCTION_NAME_OR_KEYWORD (x)
i
SELECT FUNCTION_NAME_OR_KEYWORD(x)
(musi przetestować słowa kluczowe, aby zobaczyć, czy są one funkcjami), a ponieważ (x) zostanie przeanalizowany do x, wynika z tego, że dla FUNCTION_NAME_OR_KEYWORD -> DISTINCT (i wszystkich innych słów kluczowych modyfikujących SELECT) nie ma różnicy między
SELECT DISTINCT x, y, z, ...
i
SELECT DISTINCT(x), y, z, ...
QED, ale bez twardych odniesień (założenie, że standard nie dba o odstępy między nazwami funkcji i nawiasami jest, jak sądzę, uzasadnione, ale nie byłem w stanie przestrzegać gramatyki BNF do tego stopnia, że mógłbym zacytować dokładną zasadę).
UWAGA:mysql ma pewną liczbę funkcji, w których zależy mu na odstępach między funkcjami i nawiasami, ale uważam, że są to wyjątki (stąd opcja serwera, aby to zignorować)