Bueno entrando al problema que tengo es que necesito relacionar 3 tablas hasta ahí mas o menos me aclaro

El problema viene y aquí empiezo a explicar un poco la base de datos.
Es un software para el control de practicas que hace un alumno en un curso.
Tengo una tabla que define las practicas que tiene que hacer un alumno, es decir esta tabla almacena datos el id de la practica el nombre y los objetivos.
Otra tabla almacena si la practica se ha completado y esta aprobada por cada alumno, es decir almacena el id de la practica el id del alumno y 0 si esta aprobada y 1 si la ha suspendido.
y por ultimo la tercera es la tabla con los datos del alumno.
el problema me lo encuentro al relacionar la tabla 1 y 2 ya que si la 1 tabla fuera para un alumno solo no hay problema pq usando left join me daría NULL a las no realizadas y se acabo.
pero cuando hay algún alumno que ya ha realizado esa practica no da NULL y necesito obtener las practicas que salen como 0 o directamente no han sido creadas en la 2 tabla.
había pensado hacerlo usando NOT IN como condición WHERE y y así funciona pero el script a la que le metes alguna relación se vuelve excesivamente lento.
Alguno se le ocurre como hacerlo.
Código PHP:
SELECT
practica.practica
FROM
practica
WHERE
idpractia NOT IN (
SELECT
idpractica
FROM
practica_completadas
WHERE
completada = 1 and idstudent = 514
)