Para que funcione,
el orden debe ser anterior a la numeración. ya que la numeración va generándose a medida que los registros van siendo leídos y eso está determinado por el WHERE y no por el ORDER BY.
En tu contexto, incluso, no se necesita poner un JOIN (trata de no usar la coma, trae más problemas que ventajas) para inicializar la variable, porque como no puedes sumarla en ese punto, da lo mismo ponerla como campo del SELECT que en un JOIN.
La ida sería:
Código MySQL:
Ver original (@num:=@num+1) item,
codigoa,
nombre,
apellido
A.codigoa,
A.nombre,
A.apellido,
@num:=0
alumnos A
INNER JOIN matricula M
ON A.codigoa
= M.codigoa
A.seccion
LIKE '$seccion' A.especialidad
LIKE '$especialidad'