Posted on 11-01-2008
Filed Under (DB2, SQL) by galifate

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.

Discutir en el foro (0)

    Read More   

Comments

manglio on 18 Abril, 2008 at 11:29 am #

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


Post a Comment
Name:
Email:
Website:
Comments: