Valeu Osvaldo e Diogo. Esclareceu bem!
At.te, Alisson Viegas [EMAIL PROTECTED] --- Acsiv Sistemas www.acsiv.com.br -----Mensagem original----- De: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] Em nome de Osvaldo Rosario Kussama Enviada em: quarta-feira, 13 de agosto de 2008 14:22 Para: Comunidade PostgreSQL Brasileira Assunto: Re: [pgbr-geral] RES: Hubert Lubaczewski: NULLs vs. NOT IN() Alisson Viegas | Acsiv Sistemas escreveu: > Ribamar, to migrando pra SGDB (sempre usei DBF). > > Poderiam me explicar por quê correr dos nulos. > > Sempre pensei que nulos aliviava a carga do banco. > > > > > > At.te, > Alisson Viegas > [EMAIL PROTECTED] > > --- > Acsiv Sistemas > www.acsiv.com.br <http://www.acsiv.com.br/> > > > > > > *De:* [EMAIL PROTECTED] > [mailto:[EMAIL PROTECTED] *Em nome de > *Ribamar Sousa > *Enviada em:* quarta-feira, 13 de agosto de 2008 12:12 > *Para:* Comunidade PostgreSQL Brasileira > *Assunto:* Re: [pgbr-geral] Hubert Lubaczewski: NULLs vs. NOT IN() > > > > 2008/8/13 Osvaldo Kussama <[EMAIL PROTECTED] > <mailto:[EMAIL PROTECTED]>> > > Ribamar: > > Talvez seja o caso descrito no manual: > http://www.postgresql.org/docs/current/interactive/functions-subquery.html#A EN15302 > > "Note that if the left-hand expression yields null, or if there are no > equal right-hand values and at least one right-hand row yields null, > the result of the NOT IN construct will be null, not true. This is in > accordance with SQL's normal rules for Boolean combinations of null > values." > > A combinação de NULL com NOT IN nem sempre dá o resultado que > usualmente (bom senso?) esperamos. > > Osvaldo > > > Osvaldo, parece que isso reforça a grande recomendação dos gurus e mestre: > > "Corram dos nulos!". > > Mas e se o bichim correr atraz da gente? :) > A idéia de NULL é algo que normalmente confunde os iniciantes em banco de dados. Usualmente NULL significa algo desconhecido, algo que não tem valor. NULL não é uma string vazia '' (uma string vazia é algo conhecido: é uma string de comprimento zero). Outra grande confusão: NULL = NULL? ou NULL <> NULL? Como NULL é algo desconhecido como posso saber se: "algo que não sei o que é" pode ser igual (ou diferente) de "algo que não tenho a menor idéia do que seja"? Por isso a resposta para qualquer destas duas comparações é NULL! (isto é: não sei). E se comparar algum valor com NULL? Por ex. 10 = NULL ou 10 <> NULL? Também em ambos os casos o resultado é NULL. Como saber se uma expressão é ou não NULL? Utilize: IS [ NOT ] NULL Assim: 10 IS NULL dá como resposta falso. Como fazer para considerar como igual ou diferente o resultado de comparações envolvendo NULL? Utilize: IS [ NOT ] DISTINCT FROM Assim: 10 IS DISTINCT FROM NULL dá como resposta verdadeiro; NULL IS DISTINCT FROM NULL dá como resposta falso. E tenha muito cuidado com a utilização de IN e NOT IN. SELECT 10 IN (10,20); ==> verdadeiro SELECT 10 NOT IN (10,20); ==> falso SELECT 10 IN (NULL,10,20); ==> verdadeiro SELECT 10 NOT IN (NULL,10,20); ==> false SELECT 30 IN (10,20); ==> falso SELECT 30 NOT IN (10,20); ==> verdadeiro SELECT 30 IN (NULL,10,20); ==> NULL SELECT 30 NOT IN (NULL,10,20); ==> NULL Se a expressão do lado esquerdo do IN (ou NOT IN) for NULL o resultado será sempre NULL. Por isso sempre tome cuidado ao utilizar NULL. Ele pode ser útil? Sim, por ex. uma data de encerramento contendo NULL normalmente significa que o item ainda está ativo. É só tomar os devidos cuidados ao utilizá-lo. Osvaldo _______________________________________________ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral No virus found in this incoming message. Checked by AVG - http://www.avg.com Version: 8.0.138 / Virus Database: 270.6.1/1607 - Release Date: 12/08/2008 07:19 _______________________________________________ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral