Eso suena a que le campo id es un texto, y claro.... para un texto 12 es mayor que 2, tienes algunas opciones, convertir ese campo en numérico, hacer que la select ordene ese campo como si fuera numérico.
select * from tabla order by convert(int, id) ASC
o actualizar la información de la tabla y rellenar con ceros por la izquierda, hasta una longitud determinada, así 012, sería mayor que 002
Estas opciones tienen su peligro, si es una tabla que ya tiene información y aplicaciones trabajando con ella, puede que alguno deje de funcionar, si conviertes esos datos a numéricos, además, si existiera algún texto, no lo convertiría, y perderías información.
Si haces la select convirtiendo en numérico, te dará un error si encuentra un texto y no lo puede convertir, y si pones los ceros delante, el problema de datos que pierdan relación lo tendrías igual que en el priimer caso
Un saludo y suerte