Además del hecho de que está utilizando una sintaxis de coma implícita obsoleta para las uniones, también está combinando columnas de las tablas de forma incorrecta en la subconsulta.
subject_name
es una columna de subject
que no tiene nada que ver con la relación del alumno con las notas. Por lo tanto, la marca se puede unir por separado con el sujeto al determinar los ID_estudiantes con la calificación más alta. Luego podemos obtener el nombre del estudiante usando esos id_estudiantes
Entonces, en Oracle 12c y superior, podrías hacer
SELECT s.student_name
FROM student s
WHERE s.student_id IN ( SELECT m.student_id
FROM mark m JOIN subject su
ON su.subject_id = m.subject_id
WHERE lower(su.subject_name) = 'software engineering'
ORDER BY m.value DESC
FETCH FIRST 1 ROWS WITH TIES ) order by 1;
Para versiones anteriores, puede usar dense_rank
o rank
SELECT s.student_name
FROM student s
WHERE s.student_id IN ( SELECT student_id
FROM ( SELECT m.*,DENSE_RANK() OVER(
ORDER BY m.value DESC
) AS rnk
FROM mark m JOIN subject su
ON su.subject_id = m.subject_id
WHERE lower(su.subject_name) = 'software engineering'
) WHERE rnk = 1
) order by 1;