Lo siento, en el apuro confundí tu STR_TO_DATE con TO_CHAR, que es la función en Oracle.
De todos modos, como yo lo veo la cosa es así:
Si lo que quieres es los alumnos que están inscriptos en 2007, pero que no lo están en 2008, el tema no es comparar las fechas, y menos aún hacer conversiones innecesarias como la de STR_TO_DATE('2007-07-16','%Y-%m-%d').
Esta conversión no se necesita porque MySQL cuando realiza una comparación entre un campo DATE contra un String que tiene el formato correcto (yyyy-MM-dd), hace la conversión en forma automática. Ni siquiera tienes que perder el tiempo en pensarlo.
Además, como ya dije, la cosa no es con una fecha determinada. Lo que quieres saber es si los de 2007 no estuvieron en 2008, no si se inscribieron en una fecha determinada.
Eso se responde mejor con una subconsulta:
Código:
SELECT *
FROM tabla
WHERE cod_reg NOT IN
(
SELECT cod_reg
FROM tabla
WHERE año_inscripcion =2008
);
En caso de no usar año_inscripción, sino fecha_inscripción, sería:
Código:
SELECT *
FROM tabla
WHERE cod_reg NOT IN
(
SELECT cod_reg
FROM tabla
WHERE YEAR(fecha_inscripcion) =2008
);