Query não recupera null

Pessoal, essa é minha query:

--ATENDIMENTO EMPRESA MATRIZ SUS (COM NOME DOS PROCEDIMENTOS)
SELECT AD.CD_PROCEDIMENTO, AD.CD_ATENDIMENTO AS "ATENDIMENTO",
PC.NM_PACIENTE AS "NOME DO PACIENTE",
PC.NR_CPF AS "CPF",
PC.DT_NASCIMENTO AS "DATA DE NASC",
PC.NM_BAIRRO AS "BAIRRO",
C.NM_CIDADE AS "CIDADE",
PC.NR_CEP AS "CEP",
ES.DS_ESPECIALID AS "ESPECIALIDADE",
CO.NM_CONVENIO AS "CONVENIO",
AD.DT_ATENDIMENTO AS "DATA DO ATENDIMENTO",
M.DS_MULTI_EMPRESA AS "EMPRESA",
PC.CD_PACIENTE AS "CD PACIENTE",
PS.DS_PROCEDIMENTO AS "PROCEDIMENTO"


FROM ATENDIME AD,
PACIENTE PC,
MULTI_EMPRESAS M,
ESPECIALID ES,
CONVENIO CO,
CIDADE C,
PROCEDIMENTO_SUS PS

WHERE AD.DT_ATENDIMENTO between '01/01/2013' AND '31/08/2016' --MODIFICAR A DATA
AND AD.CD_PACIENTE = PC.CD_PACIENTE
AND AD.CD_MULTI_EMPRESA = M.CD_MULTI_EMPRESA
AND AD.CD_ESPECIALID = ES.CD_ESPECIALID
AND PC.CD_CIDADE = C.CD_CIDADE
AND AD.CD_CONVENIO = CO.CD_CONVENIO
AND AD.CD_PROCEDIMENTO = PS.CD_PROCEDIMENTO
AND AD.CD_MULTI_EMPRESA in (1)

Pessoal, essa query não retorna alguns campos null da coluna PS.DS_PROCEDIMENTO.

Como assim “não retorna alguns campos null da coluna”? Não faz sentido sua pergunta.

O problema pode ser como vc definiu o tipo de dados que receberá este valor, por exemplo:
Se vc tenta gravar um valor do tipo int com null, ele irá gravar como 0.

Qual o tipo da variável que recebe este valor de retorno?

Por exemplo, está vendo a coluna PC.NR_CEP, quando não é inserido o CEP ele fica null, mas quando faço o select ele não deixa de retornar o restante do endereço porque o CEP é null.

Já a coluna AD.CD_PROCEDIMENTO se não foi inputado valor e o campo ficar null, o select descarta todas as informações, trazendo apenas tendimentos que tem o campo preenchido, mas note que em nem um momento eu coloquei a condição de NOT NULL para ele.

Tenta dessa forma:

--atendimento empresa matriz sus (com nome dos procedimentos)
select ad.cd_procedimento, ad.cd_atendimento as "atendimento",
pc.nm_paciente as "nome do paciente",
pc.nr_cpf as "cpf",
pc.dt_nascimento as "data de nasc",
pc.nm_bairro as "bairro",
c.nm_cidade as "cidade",
pc.nr_cep as "cep",
es.ds_especialid as "especialidade",
co.nm_convenio as "convenio",
ad.dt_atendimento as "data do atendimento",
m.ds_multi_empresa as "empresa",
pc.cd_paciente as "cd paciente",
ps.ds_procedimento as "procedimento"

from atendime ad 
inner join paciente pc on pc.cd_paciente = atendime.cd_paciente
inner join multi_empresas m on m.cd_multi_empresa = ad.cd_multi_empresa
inner join especialid es on es.cd_especialid = ad.cd_especialid
inner join convenio co on co.cd_convenio = ad.cd_convenio
inner join cidade c on c.cd_cidade = pc.cd_cidade
left join procedimento_sus ps on ps.cd_procedimento = ad.cd_procedimento

where ad.dt_atendimento between '01/01/2013' and '31/08/2016' --modificar a data
and ad.cd_multi_empresa in (1)

E dá uma estudada no seguinte artigo: http://www.devmedia.com.br/sql-join-entenda-como-funciona-o-retorno-dos-dados/31006

P.S.: não testei a sintaxe do comando SQL.

1 curtida

Resolveu perfeitamente, obrigado camarada!