Voor de volledigheid beantwoord ik de mijne en link ik naar een andere vraag van mezelf. Het lijkt erop dat dit gedrag een direct gevolg is van de SQL-standaard die witruimte tussen de functie en haakjes toestaat.
Aangezien het (over het algemeen) is toegestaan om FUNCTION_NAME (x) te zeggen, wanneer deze functie wordt toegepast op een eerste term van select
SELECT FUNCTION_NAME (x)
dan zal de parser het moeilijk hebben om vast te stellen of dit een context is van een functienaam of een SELECT-modificerend sleutelwoord.
Dus in het bovenstaande geval is de FUNCTION_NAME eigenlijk FUNCTION_NAME_OR_KEYWORD voor de parser.
Maar het gaat verder:aangezien de spatie tussen functienaam en haakjes IS toegestaan, kan de parser eigenlijk GEEN onderscheid maken tussen
SELECT FUNCTION_NAME_OR_KEYWORD (x)
en
SELECT FUNCTION_NAME_OR_KEYWORD(x)
(het moet de trefwoorden testen om te zien of het functies zijn), en aangezien (x) wordt geparseerd naar x, volgt hieruit dat voor FUNCTION_NAME_OR_KEYWORD -> DISTINCT (en alle andere SELECT wijzigende trefwoorden) er geen verschil is tussen
SELECT DISTINCT x, y, z, ...
en
SELECT DISTINCT(x), y, z, ...
QED, maar zonder harde referenties (aanname dat standaard geeft niet om witruimte tussen functienamen en haakjes is, geloof ik, gerechtvaardigd, maar ik kon de BNF-grammatica niet zo goed volgen dat ik de exacte regel kon citeren).
OPMERKING:mysql heeft een bepaald aantal functies waarbij het om witruimte tussen functies en haakjes geeft, maar ik geloof dat dit uitzonderingen zijn (vandaar de serveroptie om het te negeren)