Pro úplnost odpovídám na svůj vlastní a odkazuji na další otázka mého vlastního. Zdá se, že toto chování je přímým důsledkem standardu SQL, který umožňuje mezery mezi funkcí a závorkou.
Protože je (obecně) povoleno říkat FUNCTION_NAME (x), pak když je tato funkce aplikována na první výraz select
SELECT FUNCTION_NAME (x)
pak bude mít parser těžké určit, zda se jedná o kontext názvu funkce nebo modifikujícího klíčového slova SELECT.
Takže ve výše uvedeném případě je FUNCTION_NAME ve skutečnosti FUNCTION_NAME_OR_KEYWORD pro analyzátor.
Jde však ještě dále:protože mezera mezi názvem funkce a závorkou JE povolena, analyzátor ve skutečnosti NEMŮŽE rozlišovat mezi
SELECT FUNCTION_NAME_OR_KEYWORD (x)
a
SELECT FUNCTION_NAME_OR_KEYWORD(x)
(musí otestovat klíčová slova, aby zjistil, zda se jedná o funkce), a protože (x) bude analyzováno na x, vyplývá z toho, že pro FUNCTION_NAME_OR_KEYWORD -> DISTINCT (a všechna ostatní klíčová slova modifikující SELECT) není žádný rozdíl mezi
SELECT DISTINCT x, y, z, ...
a
SELECT DISTINCT(x), y, z, ...
QED, ale bez pevných odkazů (předpoklad, že standardní nestará se o mezery mezi názvy funkcí a závorkami je, věřím, oprávněné, ale nebyl jsem schopen dodržet gramatiku BNF do té míry, abych mohl citovat přesné pravidlo).
POZNÁMKA:mysql má určitý počet funkcí, kde se stará o mezery mezi funkcemi a závorkami, ale věřím, že se jedná o výjimky (proto možnost serveru to ignorovat)