Pues sÃ, es lo que pasa cuando comparas con la igualdad dos campos que son nulos. Al menos en lo que a DB2 se refiere.
Estas confusiones no se suelen dar, porque hacer un filtro en una query SQL con esta comparación no suele tener mucho sentido. Lo malo es cuando tienes en una tabla con un Ãndice único con un campo nullable. SÃ, ya lo sé. Para mi esto es una analogÃa entre hacer una consulta SQL y darle una patada al diccionario. Funciona y nos entendemos, pero las cosas no se hacen asÃ, pues puedes acabar entendiendo mal las cosas si te sales del contexto.
Total, tienes una tabla TABLA con campos (a, b, c, d) y con el siguiente contenido:
(a, b, c, d)
(a1, b1, c1, null)
Además tienes la tabla TABLA1 con los campos (w, x, y, z) y con el siguiente contenido:
(w, x, y, z)
(a1, b1, c1, null)
Finalmente, si hacemos una join con todos los campos puede parecer que el resultado serÃa (a1, b1, c1, null). Pues no, el resultado es NADA de NADA, porque null!=null.
Si lo que queremos es obtener el registro que decÃa antes, (a1, b1, c1, null), habrÃa que hacer algo asà como:
SELECT *
FROM
TABLA
JOIN TABLA1
ON a=w
AND b=x
AND c=y
AND (z=d OR (z IS NULL AND d IS NULL))
Pues ya está. Otra cosita más del tema DB2.
recuerden que null por definicion no se puede comparar con nada, si quiere filtrar nulls usen por ejemplo:
where id is not null
where id is null
where codigo is not null etc.
y si quieren convertir de null a otro valor usen coalesce
select coalesce(sum(venta),0) from tabla
en este ejemplo si el campo venta trae null, coalesce lo convierte a cero
saludos