Acho que isso pode ser testado usando a função sleep(),
por exemplo, dê uma olhada nesta demonstração: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;
Os tempos de execução de ambas as consultas são cerca de 3000 ms ( 3 segundos ).
Existem 3 registros na tabela, e para cada registro a consulta dorme por apenas 1 segundo,
assim significa que a expressão é avaliada apenas uma vez para cada registro, não duas vezes.