Es que al convertir la fecha a cadena de caracteres te lo ordena alfabeticamente. Si quieres convertirla a char antes de ordenar, tendrás que utilizar el formato americano (AAAAMMDD) si no siempre puedes ordenar sin convertir a char
Código SQL:
Ver originalSELECT to_char(fecha,'dd-mm-yyyy')
FROM tabla1
WHERE fecha > trunc(systade-30);
ORDER BY fecha DESC