Por lo pronto, no es buena práctica poner una fecha separada en tres campos (dia, mes y año). Es preferible usar un campo de tipo DATE, y no hacer ese esquema.
Por lo demás, un JOIN basado en fecha, lo veo súmamente inseguro, y con tendencia a erorres por datos.
Fuera de eso, el JOIN, sea LEFT o RIGHT, para que devuelva todo de forma segura requiere que se incluya en el WHERE la condición de NULL.