Creo que esto se puede probar usando la función sleep(),
por ejemplo, eche un vistazo a esta demostración:http://sqlfiddle.com/#!2/0bc1b/1
Select * FROM t;
| X |
|---|
| 1 |
| 2 |
| 2 |
SELECT x+sleep(1)
FROM t
GROUP BY x+sleep(1);
SELECT x+sleep(1) As name
FROM t
GROUP BY name;
Los tiempos de ejecución de ambas consultas son de aproximadamente 3000 ms (3 segundos).
Hay 3 registros en la tabla, y para cada registro, la consulta duerme solo durante 1 segundo,
por lo que significa que la expresión se evalúa solo una vez para cada registro, no dos veces.