Dúvida SQL

Tenho duas tabelinhas … uma de produto e outra de grupo de produtos…sendo que um produtos não é obrigatório ter um grupo…

Então… na tabela de produto eu tenho um campo chamado cdGrupo …onde este relaciona produto a grupo…

porém tenho que fazer uma pesquisa sql para listar os produtos e trazer junto a descrição do grupo…

o meu sql está assim…

SELECT PRODUTO.CDPRODUTO,
           PRODUTO.DESCRICAO,
           GRUPO.DESCRICAO AS DESC_GRUPO

FROM PRODUTO, GRUPO

WHERE PRODUTO.CDGRUPO = GRUPO.CDGRUPO

ORDER BY PRODUTO.DESCRICAO

porém os produtos que não possuem grupos não são listados… como faço para retornar também os produtos que não tem grupos?

Use um LEFT JOIN:


  FROM Produtos Prod LEFT JOIN Grupos Grp ON Prod.cd_grupo = Grp.cd_grupo

E tira o WHERE do seu sql.

Você está usando um INNER JOIN e ele só retorna quando encontra registros dos “dois lados”.

Se você estiver usando MySQL e caso queira ver todos os relacionamento até mesmo um grupo sem produtos você pode usar um RIGHT JOIN + UNION + LEFT JOIN.
Caso seja outro SGBD busque por FULL JOIN

Exemplo MySQL:

SELECT p.id, p.nome, g.descricao AS DESC_GRUPO from produtos p
LEFT join grupo_produto g ON (p.cdgrupo=g.id)
UNION
SELECT p.id, p.nome, g.descricao AS DESC_GRUPO from produtos p
RIGHT join grupo_produto g ON (p.cdgrupo=g.id)

Como minhas tabelas tem campos diferentes do seu, somente faça a adaptação dos mesmos.

Como o AbelBueno disse, você deve utilizar um LEFT JOIN.
Por que?
Simples, o LEFT indica que os elementos que estão na tabela “à esquerda” não são fundamentais. Eles devem ser carregados na consulta se e somente se existirem. Independente disso, os elementos da tabela “à direita” devem ser, sempre, carregados na consulta.

[quote=drsmachado]
Simples, o LEFT indica que os elementos que estão na tabela “à esquerda” não são fundamentais. Eles devem ser carregados na consulta se e somente se existirem. Independente disso, os elementos da tabela “à direita” devem ser, sempre, carregados na consulta.[/quote]

Só se eu não entendi direito sua explicação, mas, os elementos a esquerda são da tabela produtos ( FROM Produtos Prod LEFT JOIN Grupos Grp ). Logo eles são os elementos que o Left irá retornar mesmo que não tenham um valor referente na tabela grupo.

Quanto ao meu exemplo é como eu disse: "… Se você estiver usando MySQL e caso queira ver todos os relacionamento até mesmo um grupo sem produtos …"
Mas para oq ele quer a sentença do AbelBueno é a necessária.