O uso da função TO_CHAR em um ORDER BY quase sempre é um erro.
O valor da coluna será ordenado alfabeticamente em vez de ser ordenado de acordo com o tipo de dados da coluna.
Supondo que temos os dados abaixo na tabela EMP:
| empno | hiredate |
| 1 | 2019-10-01 |
| 5 | 2019-10-10 |
| 15 | 2018-10-02 |
| 20 | 2018-10-20 |
select empno from emp order by to_char(empno);
| empno |
| 1 |
| 15 |
| 20 |
| 5 |
select hiredate from emp order by to_char(hiredate, 'dd-mm-rrrr');
| hiredate |
| 01-OCT-19 |
| 02-OCT-18 |
| 10-OCT-19 |
| 20-OCT-18 |
TO_CHAR.
select empno from emp order by empno;
| empno |
| 1 |
| 5 |
| 15 |
| 20 |
select hiredate from emp order by hiredate;
| hiredate |
| 02-OCT-18 |
| 20-OCT-18 |
| 01-OCT-19 |
| 10-OCT-19 |