La mayoría de veces me aparece todo perfecto, pero cuando un alumno tiene dos o más fotos el resultado aparece duplicado.
¿Qué solución se os ocurre aparte de usar un GROUP BY la.ID?
Por que creo que debe existir alguna forma mejor ¿no?
No regresa duplicados xD, coloca el campo fo.nombre_foto y verás, aunque no sé que quieres hacer.
Si necesitas todas las fotos del alumno tu consulta está bien.
Si necesitas la última foto capturada tendrías que hacer lo siguiente.
SELECT * FROM alumnos al INNER JOIN
(SELECT ID_alumno, MAX(TIMESTAMP) FROM fotos GROUP BY ID_alumno) fo
ON al.ID=fo.ID_alumno
1. No se que tiene que ver tu consulta con php
2. No utilices palabras reservadas por el motor de base de datos (timestamp)
Saludos.