Tengo tres tablas
producto: productos
Codigo: cada producto puede tener distintos tipos de codigo: barra, fabrica, interno
ProductoCodigo es la que relaciona un producto con su codigo. Un producto puede tener 0, 1.. n codigos (como máximo uno solo por tipo (tabla codigo))

CREATE TABLE producto
(
prod_id integer, prod_nombre nvarchar(50),
PRIMARY KEY (prod_id)
);

INSERT INTO PRODUCTO (prod_id,prod_nombre)
VALUES (1,'Aceite'), (2,'Arroz'), (3,'Harina')


CREATE TABLE codigo
(
cod_id integer, cod_nombre nvarchar(50),
PRIMARY KEY (cod_id)
);

INSERT INTO CODIGO (cod_id,cod_nombre)
VALUES (1,'CodBarra'), (2,'CodFabrica'), (3,'CodInterno')



CREATE TABLE CODPROD
(
prod_id integer, cod_id integer, codprod_Valor nvarchar(50),
PRIMARY KEY (prod_id,cod_id),
FOREIGN KEY (prod_id) REFERENCES producto(prod_id),
FOREIGN KEY (cod_id) REFERENCES codigo(cod_id)
);


INSERT INTO CODPROD (prod_id,cod_id,codprod_valor)
VALUES (1,1,'AAAA'), (1,2,'0000'), (1,3,'CINT01'),
(2,1,'BBBB'),
(2,3,'3333')



SELECT p.prod_id, p.prod_nombre,
if(c.cod_id = 1, codprod_valor, '') AS Codigo1,
if(c.cod_id = 2, codprod_valor, '') AS Codigo2,
if(c.cod_id = 3, codprod_valor, '') AS Codigo3
FROM producto p
LEFT JOIN codprod cp
ON p.prod_id=cp.prod_id
INNER JOIN codigo c
ON cp.cod_id=c.cod_id

Con estos datos y mi consulta obtengo:
prod_id prod_nombre Codigo1 Codigo2 Codigo3
1 Aceite AAAA "" ""
1 Aceite "" 0000 ""
1 Aceite "" "" CINT01
2 Arroz BBBB "" "
2 Arroz "" "" 3333

y me interesa obtener
prod_id prod_nombre Codigo1 Codigo2 Codigo3
1 Aceite AAAA 0000 CINT01
2 Arroz BBBB 3333 ""
2 Harina "" "" ""

Desde ya muchas gracias a cualquier ayuda o punta que me tiren para resolver mi problema