Dado que el campo DNI es un VARCHAR y no un algún tipo de INT, los DNI no se pueden ordenar como números.
SELECT DNI, COUNT(*) AS NUMERO_DE_COMPRAS
FROM FACTURAS
WHERE YEAR(FECHA_VENTA) = 2016
GROUP BY DNI
HAVING NUMERO_DE_COMPRAS > 2000
ORDER BY DNI;
Pero si usamos la función CAST(DNI AS NUMERO), la cual convierte texto a número, entonces sí se puede hacer.
SELECT DNI, COUNT(*) AS NUMERO_DE_COMPRAS
FROM FACTURAS
WHERE YEAR(FECHA_VENTA) = 2016
GROUP BY DNI
HAVING NUMERO_DE_COMPRAS > 2000
ORDER BY CAST(DNI AS UNSIGNED);
