Zasadniczo są one sobie równoważne (w rzeczywistości tak niektóre bazy danych implementują DISTINCT pod maską).
Jeśli jeden z nich jest szybszy, będzie DISTINCT . Dzieje się tak dlatego, że chociaż oba są takie same, optymalizator zapytań musiałby wychwycić fakt, że GROUP BY nie wykorzystuje żadnych członków grupy, tylko ich klucze. DISTINCT wyraźnie to wyjaśnia, więc możesz uciec z nieco głupszym optymalizatorem.
W razie wątpliwości przetestuj!