Filtrar campo diferente de nulo em SQL
Tentei realizar uma consulta SQL filtrando um determinado campo char de tamanho 1 para exibir registros diferentes de ´U´, mas nada é exibido:
select * from tabela where campo<>´U´
Este campo, em sua grande maioria, possui registros nulos, apenas alguns registros possuem o caractere ´U´, mas nada é retornado na consulta.
Posso facilmente resolver isto filtrando os registros como nulos:
select * from tabela where campo is null
Mas, gostaria de entender porque isto acontece para que não cometa erros no código de alguma aplicação.
Utilizo o Firebird 1.5.
Se alguém puder me explicar, obrigado.
Alexandre.
select * from tabela where campo<>´U´
Este campo, em sua grande maioria, possui registros nulos, apenas alguns registros possuem o caractere ´U´, mas nada é retornado na consulta.
Posso facilmente resolver isto filtrando os registros como nulos:
select * from tabela where campo is null
Mas, gostaria de entender porque isto acontece para que não cometa erros no código de alguma aplicação.
Utilizo o Firebird 1.5.
Se alguém puder me explicar, obrigado.
Alexandre.
Alexandre7
Curtidas 0
Respostas
Marcos Fernando
30/10/2003
vc manda selecionar os campos <> ´U´ como vc só utiliza u como informaçoes null é nulo,,,, então não está no paramentro <> ´U´...
para ele encontrar não deixe a campo nulo, acresente um ´A´ ai sim,,pois o campo não será mais nulos,,,,,,sua consulta está certa como is null
para ele encontrar não deixe a campo nulo, acresente um ´A´ ai sim,,pois o campo não será mais nulos,,,,,,sua consulta está certa como is null
GOSTEI 0
Alexandre7
30/10/2003
Entendi, Marcos.
Mas, uma vez que null é diferente de ´U´, a consulta não deveria exibir os registros com o campo nulo mesmo assim?
Isso irá ocorrer em qualquer tipo de campo (data, valor, texto), tanto no Firebird como no Interbase? Será que esta regra é comum para outros bancos de dados?
Questiono apenas para aprender mais.
Valeu.
Mas, uma vez que null é diferente de ´U´, a consulta não deveria exibir os registros com o campo nulo mesmo assim?
Isso irá ocorrer em qualquer tipo de campo (data, valor, texto), tanto no Firebird como no Interbase? Será que esta regra é comum para outros bancos de dados?
Questiono apenas para aprender mais.
Valeu.
GOSTEI 0
Afarias
30/10/2003
|Mas, uma vez que null é diferente de ´U´, a consulta não deveria exibir
|os registros com o campo nulo mesmo assim?
NULL não é diferente de ´U´ e nem é igual a ´U´ -- NULL não é valor, é apenas um estado como ´desconhecido´
|Isso irá ocorrer em qualquer tipo de campo (data, valor, texto), tanto no
|Firebird como no Interbase? Será que esta regra é comum para outros
|bancos de dados?
Todos os bancos de dados (segundo as normas SQL ANSI 92)
Vc pode ter seu SQL na forma::
select * from tabela where campo is NULL or campo<>´U´
T+
|os registros com o campo nulo mesmo assim?
NULL não é diferente de ´U´ e nem é igual a ´U´ -- NULL não é valor, é apenas um estado como ´desconhecido´
|Isso irá ocorrer em qualquer tipo de campo (data, valor, texto), tanto no
|Firebird como no Interbase? Será que esta regra é comum para outros
|bancos de dados?
Todos os bancos de dados (segundo as normas SQL ANSI 92)
Vc pode ter seu SQL na forma::
select * from tabela where campo is NULL or campo<>´U´
T+
GOSTEI 0
Alexandre7
30/10/2003
Obrigado pelas informações, Marcos e Farias.
GOSTEI 0