Consulta INNER JOIN com vrias tabelas onde minha SQL está dando problemas

Ola pessoal, boa tarde, eu repciso de ajuda eu gostaria unir 3 campos de 3 tabelas diferentes que contem a mesdma chave estrangeira porém minha sql não está saindo do jeito quer gostaria, aghluém pode me ajudar, eu preciso do CodCliente, Nome telefone e email que estão nas respctivas tabelas abaixo e eaqui está minha sql:

SELECT telefone.* FROM telefone
INNER JOIN pessoafisica ON pessoafisica.CodCliente = telefone.CodCliente INNER JOIN cliente ON pessoafisica.CodCliente = cliente.CodCliente
ORDER BY pessoafisica.nome ASC

CREATE TABLE Cliente(
CodCliente INT(11) AUTO_INCREMENT,
DataInscricao DATE,
CodEndereco INT(11),
Email VARCHAR(50),
XDEAD BOOLEAN DEFAULT FALSE,
/FK/
FOREIGN KEY(CodEndereco) REFERENCES Endereco(CodEndereco),
/PK/
PRIMARY KEY(CodCliente)
);

CREATE TABLE Telefone(
CodCliente INT(11),
Numero VARCHAR(15),
XDEAD BOOLEAN DEFAULT FALSE,
/FK/
FOREIGN KEY(CodCliente) REFERENCES Cliente(CodCliente),
/PK/
PRIMARY KEY(CodCliente, Numero)
);

CREATE TABLE PessoaFisica(
CodCliente INT(11),
Cpf VARCHAR(20),
Nome VARCHAR(50),
DataNascimento DATE,
XDEAD BOOLEAN DEFAULT FALSE,
/FK/
FOREIGN KEY(CodCliente) REFERENCES Cliente(CodCliente),
/PK/
PRIMARY KEY(CodCliente)
);

SELECT c.CodCliente, pf.Nome, t.Numero, c.Email 
FROM Cliente AS c
INNER JOIN PessoaFisica AS pf on pf.CodCliente = c.CodCliente
INNER JOIN Telefone AS t on t.CodCliente = c.CodCliente
WHERE c.CodCliente = ?
ORDER BY pf.Nome

A linha do WHERE é opcional, o símbolo do ? seria um código passado para trazer de um único cliente, se você remover essa linha, todos os clientes que possuem telefone e são pessoas físicas aparecerão…

Apenas uma OBS, as tabelas Cliente e PessoaFisica não poderiam ser tornar uma só?

Geralmente costumamos apenas “flegar” (marcar uma coluna) para idenfifcar se o cliente é PJ ou PF, exemplo um tinyint(1) já trabalha como booleano (O BOOLEAN do mysql vira isso no fim das contas), sendo zero para PF ou 1 para PJ ou vice-versa o que acha?

Melhor que juntar as duas tabelas para trazer informações como nome (todo cliente tem um nome, mesmo sendo PJ, logo, teria de criar uma coluna nome na tabela PessoaJuridica também?)

Percebeu o problema da redundância de dados/informações replicadas/repetidas em várias tabelas?

Cada projeto tem sua regra de negócio, as sugiro estudar esse caso específico, talvez consiga melhorar, espero ter ajudado

muito obrigado amigo na verdade quem fez essa configuração de bd não fui eu, foi o outro colega do grupo ele gosta de complicar as coisas ahshahsahsha e eu precisava fazer um jasper report em cima dessa sql

e sim ele criou umnome em PJ tb so que el chamou de nome fantasia ahshashahsah e eu não sei pq motivos ele colocou CodCliente como PK e FK ao mesmo tempo

uma pergunta o que occore se eu sustituir o ultimo INNER JOIN por CROSS JOIN?

Cross Join raramente é usado e serve para cruzar (cross) todos os registros da tabela 1 com a tabela 2 sem critérios ou filtros (uso do on…) como o inner faz…

Cross join retorna um produto cartesiano

obrigado