Erro: Select Distinct Postgresql

Tenho as seguintes grades: cor,tamanho, tecido

produto1 tem: variacao1:cor, variacao2:tamanho, variacao3:tecido
produto2 tem: variacao1:cor, variacao2:tamanho, variacao3:

o produto2 de id 13 não tem a variacao3 e esse Select retorna : cor,tamanho, tecido e na verdade só deveria retornar: Cor, Tamanho.

  select distinct g from Grade g, ProdutoVariacao p, Variacao v
  where (p.variacao1_id = v.id or p.variacao2_id = v.id or  p.variacao3_id = v.id) and  p.produto_id = 13 

alguém poderia dá uma ajuda?

Esta dificil de entender sua pergunta. Sugiro explicar melhor, colocar print das tabelas e do resultado com o erro.

A estrutura é:
Grade - ID,NOME
Variacao: ID, nome, GRADE_ID
ProdutoVariacao: ID, nome, produto_id, variacao1_id, variacao2_id, variacao3_id

Grade COR: amarelo, verde
Tamanho: P, M,G
Tecido: algodao, sintetico

Produto1 tem as Variacoes :
verde, p, algodao
Produto2 tem variaçoes:
verde, p

No produto 2 de id 13 no meu exemplo nao tem TECIDO. tem apenas variação VERDE e P que são das Grades: COR e TAMANHO. Sendo assim o select só deveria retornar as grades: Cor e Tamanho.

Se bem entendi o que pretendes, falta-te uma condição no where para relacionar grade e variacao.

  select distinct g 
    from Grade g, ProdutoVariacao p, Variacao v
   where (p.variacao1_id = v.id or p.variacao2_id = v.id or p.variacao3_id = v.id) 
     and v.grade_id = g.id
     and p.produto_id = 13

Isso mesmo! Obrigado.
faltava essa condição: and v.grade_id = g.id