Dica para que está quebrando a cabeça tentando fazer a ordenação no MySQL em consultas utilizando UNION.

Este bug já existe há muito tempo, você pode ver detalhes aqui. O problema ocorre quando você une duas ou mais consultas e espera um tipo de ordenação para cada uma delas.

1
2
3
4
5
6
7
8
9
10
11
12
13
(
   SELECT id_cliente AS valor, nome
   FROM clientes
   WHERE ...
   ORDER BY nome
)
UNION ALL
(
   SELECT id_cliente AS valor, nome
   FROM clientes
   WHERE ...
   ORDER BY nome
)

A solução alternativa para corrigir este problema é adicionar o LIMIT para cada uma das consultas, você pode definir o valor que quiser ou colocar algo “infinito” como 9999999.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
(
   SELECT id_cliente AS valor, nome
   FROM clientes
   WHERE ...
   ORDER BY nome
   LIMIT 99999
)
UNION ALL
(
   SELECT id_cliente AS valor, nome
   FROM clientes
   WHERE ...
   ORDER BY nome
   LIMIT 99999
)