me cree en MySQL 3 tablas, tratando de imitar las tuyas...no le puse todos los campos que vos tenes, solo los principales...despues vos lo adaptas...hice lo siguiente:
TABLA MATERIAS
Citar
codigomateria nombre
1 Matematicas
2 Fisica
3 Quimica
4 Literatura
5 Geografia
6 Etica
7 Filosofia
8 Computacion
1 Matematicas
2 Fisica
3 Quimica
4 Literatura
5 Geografia
6 Etica
7 Filosofia
8 Computacion
TABLA ALUMNOS
Citar
matricula nombre
111 Sebastian
222 Tifa
333 Skeletron
111 Sebastian
222 Tifa
333 Skeletron
TABLA KARDEX
Citar
matricula codigomateria calificacion
111 1 70
111 2 80
111 3 50
222 1 70
333 2 80
111 1 70
111 2 80
111 3 50
222 1 70
333 2 80
en este caso solo vamos a filtrar los datos del alumno "Sebastian" de matricula "111"...fijate que solo tiene 3 materias calificadas...de 8 que son en total, el SELECT seria asi:
Código
SELECT a.nombre AS nombreAlumno,m.nombre AS nombreMateria,IFNULL(k.calificacion,'NO CALIFICADO') AS calificacion FROM materias m LEFT OUTER JOIN kardex k ON m.codigomateria=k.codigomateria LEFT OUTER JOIN alumnos a ON k.matricula=a.matricula WHERE k.matricula='111' OR k.matricula IS NULL
y nos retorna:
Citar
Sebastian Matematicas 70
Sebastian Fisica 80
Sebastian Quimica 50
NULL Literatura NO CALIFICADO
NULL Geografia NO CALIFICADO
NULL Etica NO CALIFICADO
NULL Filosofia NO CALIFICADO
NULL Computacion NO CALIFICADO
Sebastian Fisica 80
Sebastian Quimica 50
NULL Literatura NO CALIFICADO
NULL Geografia NO CALIFICADO
NULL Etica NO CALIFICADO
NULL Filosofia NO CALIFICADO
NULL Computacion NO CALIFICADO
saludos.