Partamos de algunas aclaraciones que he repetido hasta el cansancio en este foro:
-
NULL no es un dato, es un estado de indeterminación o un puntero a la nada. COmo no es un dato, no se puede utilizar operadores lógicos ni matemáticos con él, ya que no existe dato con el que hacerlos funcionar. Esto significa que no puedes hacer algo como X = NULL. Simplemente no funciona.
- Con NULL lo que se usan son funciones u operadores que puedan determinar si el valor de una relación dada es NULL, o si el estado de una columna o una operación es NULL. Por eso se usan IFNULL() e IS NULL o IS NOT NULL.
- En el contexto de una consulta entre dos tablas, para determinar si existe una relación real entre dos registros (uno de cada tabla) se usa INNER JOIN, porque devolverá sólo los registros donde haya una coincidencia de condiciones.
Pero no devolverá ninguno donde uno de ambos campos sea NULL
- Para determinar si existen NULL en un JOIN se usan o LEFT JOIN o RIGHT JOIN, como te dice jurena. La condición necesaria para esto es que la primera tabla (la de la izquierda) debe ser la tabla que contenga todos los valores a analizar en su relación con la derecha. Si no existe un valor dado en la izquierda, ese valor no saldrá, ni siquiera como NULL, porque no existe nada con qué hacer la comparación.
- Esto significa que la consulta debe realizarse
siempre de modo que los NULL aparezcan en la segunda tabla (la de la derecha).
En tu caso, y usando lo que pones en el último post (bastante poca información, por cierto), la idea es bastante parecida a la de jurena:
El detalle a considerar es que la primera tabla se puede relacionar con la segunda de dos formas: o con un campo (id_padre), o con el otro (id_hijo), por lo que para considerar ambas situaciones es necesario invocar dos LEFT JOIN o realizar un UNION. Asumo que no se puede relacionar con ambos
al mismo tiempo (nadie puede ser padre e hijo de si mismo).
El ejemplo que te pongo es el segundo caso.
En cualquier caso, y para lo que sea que lo uses, recuerda que NULL no es un valor, por lo que no puedes realizar operaciones con él, y no puedes "juntarlos" en diferentes registros, porque si intentas devolver una tabla cuyos registros y campos contengan NULL, simplemente el sistema no te devolverá nada... Será una tabla vacía.