Consulta SQL não retorna nada caso ForeignKey esteja nula

Estou enfrentando um problema com uma query no MySQL, preciso pegar dados de várias tabelas, porém quando alguma das foreignkeys está nula não retorna nada.
Esta é minha query:

SELECT 
pct.id, pct.cns, pct.nomecivil, pct.nomesocial, pct.sexo, pct.raca, pct.datanasc, pct.cpf, pct.rg, pct.orgemissor, pct.email, pct.telefone, pct.celular, pct.endereco, pct.numero, pct.complemento, pct.bairro, pct.cidade, est.nome as estado, pct.mae, pct.pai, con.nome as convenio, pla.nome as plano, pct.matricula, pct.validade, pct.indeterminado, aco.nome as acomodacao, pct.observacoes 
FROM
tbpaciente as pct 
INNER JOIN convplan as cvp ON cvp.paciente =  pct.id 
INNER JOIN tbconvenio as con ON con.id = cvp.convenio 
INNER JOIN tbestado as est ON est.id = pct.estado 
INNER JOIN tbacomodacao as aco ON aco.id = pct.acomodacao 
INNER JOIN tbplano AS pla ON pla.id = cvp.plano 
WHERE pct.id = 5

Se alguém puder ajudar ficaria grato!

Olá,

No caso onde pode existir nulo, já que você deseja que a linha apareça, você deve colocar LEFT JOIN.

1 curtida

Ja tentei todos os joins possíveis, mas mesmo assim não retorna nada.

Sim, este é o comportamento padrão e normal, visto que, sem a referência, não existe relação, certo?

Agora, o que me preocupa é isso

Pois:

INNER JOIN: necessita que todas as relações em uma consulta estejam bem definidas
LEFT JOIN: necessita, apenas, que a estrutura básica da consulta exista.

Note que, para isso, nenhum dos elementos da tabela à esquerda (a que poderá ter a FK ausente) pode estar nas cláusulas da pesquisa (no where).

2 curtidas

Então, neste caso, no “ON” eu devo colocar primeiro a foreignkey e depois o id da tabela?

Não, cara.
A questão não é onde fica o alias, mas, a forma como você constrói isso.