Get all (non repeated) distribuidores with their paises given a producto_solicitud
2nd query:
Of course you get duplicate rows. 1 row per producto each fabricante is connected to - multiplied with the number of rows in pais each combination is connected to.

1st query:
An explicit JOIN binds before (groups of) comma-separated items in the FROM list. This is why you cannot reference fabricante in the JOIN condition between pais and distribuidor_producto_solicitud - that happens before the result of this operation is joined to fabricante. Per documentation:


  In the absence of parentheses, JOINs nest left-to-right. In any case
  JOIN binds more tightly than the commas separating FROM-list items.


Bold emphasis mine.

The unconditional CROSS JOIN (comma-notation) between fabricante and the rest is a mistake to begin with. You probably want:

SELECT DISTINCT f.*, p.*
FROM   negocio.distribuidor_producto_solicitud d
JOIN   nomencladores.fabricante_distribuidor   f ON f.id = d.fabricante_distribuidor_id
LEFT   JOIN nomencladores.pais_distribuidor_producto_solicitud pd
                                                 ON pd.distribuidor_producto_solicitud_id = d.id
JOIN   nomencladores.pais                      p ON p.id = pd.pais.id
WHERE  d.producto_solicitud_id = 1;


Gives you one row for every combination of (fabricante, pais). The LEFT JOIN is there to include fabricantes that have no pais attached.

You need the DISTINCT, because there can be any numbers of rows in distributor for each fabricante.

With your verbose naming convention I suggest to use table aliases to make the query more readable.