LEFT JOIN devuelve todo lo que está en la primer tabla, tenga o no relación con la segunda, pero en la segunda siempre devuelve NULL en aquellos casos donde no hay registros relacionados.
Es el comportamiento normal y esperado de LEFT JOHN. En todo caso, si quieres sólo lo que coincida si o sí, debes usar INNER JOIN.
Ahora bien, simplificando la escritura de tu query con ayuda de algunos alias, tenemos esto:
Código MySQL:
Ver original CA.iCodigoAlumno,
CA.vchNombres,
CA.vchApellidos,
CA.dtFechaNac,
CRAM.vchCodigoMateria,
CRAM.fcalificacion,
CM.vchMateria
cat_alumnos CA
LEFT JOIN cat_rel_alumno_materia CRAM
ON CA.iCodigoAlumno
= CRAM.icodigoAlumno
LEFT JOIN cat_materias CM
ON CRAM.vchCodigoMateria
= CM.vchMateria
CA.iCodigoAlumno = '210'
Esta query devuelve al alumno de codigo 210, esté o no relacionado a las materias en las que está inscripto. Esto quiere decir que si el alumno está inscripto a 2 materias, saldrán las dos. Pero por cada una de esas, devolverá ademas todas las asociaciones donde no hay materia correspondiente.
La query, en otras palabras, no tiene mucho sentido...
La preguna es, entonces, ¿qué es lo que quieres obtener? ¿Las materias a que está registrado el alumno?
Eso sería:
Código MySQL:
Ver original CA.iCodigoAlumno,
CA.vchNombres,
CA.vchApellidos,
CA.dtFechaNac,
CRAM.vchCodigoMateria,
CRAM.fcalificacion,
CM.vchMateria
cat_alumnos CA
INNER JOIN cat_rel_alumno_materia CRAM
ON CA.iCodigoAlumno
= CRAM.icodigoAlumno
INNER JOIN cat_materias CM
ON CRAM.vchCodigoMateria
= CM.vchMateria
CA.iCodigoAlumno = 210
Ahora bien, si esto no devuelve datos es porque alguna parte de la relación no se está cumpliendo, es decir, o no existen las materias asociadas al alumno en la segunda tabla, o esa tabla contiene IDs de materias que no existen.