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.
(Ojo: esto está importado de galifate.blogspot.com)
Como de higos a peras hay que hacer algo de SQL (mÃnimo pero algo) y salir un poco del Hibernate, cuando toca hay que desenpolvar alguna instrucción que normalmente se ejecuta automáticamente.
Por ejemplo, vamos sacar el siguiente valor de una secuencia, ¿ok?.
Si la secuencia se llama ID_MISECUENCIA, para obtener el siguiente valor de la secuencia tenemos lo siguiente:
SELECT NEXTVAL FOR ID_MISECUENCIA FROM SYSIBM.SYSDUMMY1
Pos eso, una chorrada más pal saco.
(Ojo: esto está importado de galifate.blogspot.com)
Pos aquà estamos. Me voy a apuntar aquà una cosita por si se me olvida. Hay un operador en SQL llamado IN, con el que uno puede hacer un OR de varios operantes. El rollo es el que sigue:
select * from tabla where t1 in (valor1, valor2, etc..)
Esto vendrÃa a ser lo mismo que hacer …
select * from tabla where t1=valor1 or t1=valor2 or etc...