No puede diferenciar las tablas invocadas. Los alias en el SELECT lo que hacen es simplemente cambiar el encabezado de la columna, pero no afectan el origen del dato, que es la tabla.
Los alias se deben aplicar a las tablas cuando invocas dos veces o más la misma tabla, porque sinó ¿cómo hace para saber de qué invocación debe obtener el dato? Piensa que las tablas se llaman igual...
El tema es simple:
Código MySQL:
Ver original J.nombre,
descripcion,
C.nombre,
C1.nombre desarrollador,
C2.nombre publicador,
G.nombre genero,
fecha,
esrb,
caja
gb_consolas C
ON J.id_consola
= C.id_consola
LEFT JOIN gb_companias C1
ON J.id_desarrollador
= C1.nombre
LEFT JOIN gb_companias C2
ON J.id_publicador
= C2.nombre
WHERE borrado
= '0' AND J.id_juego
= '$id_juego'
Además, hay dos errores adicionales que aún no han saltado:
1) Estás invocando una tabla
gb_generos, la cual aún no existe en el FROM.
2) Estás intentado hacer que el JOIN se realice entre un campo de una tabla
con el alias del SELECT de otro campo.
Esto está mal. Los campos a indicar en el ON sólo pueden ser los de las tablas físicas invocadas, por sus verdaderos nombres. Los alias en el FROM nunca suplantan nombres de campos. Sólo suplantan nombres de tablas.
Tip final: Los alias indicados en el SELECT
tampoco se pueden usar en el WHERE. Ningún DBMS los admite, incluido MySQL. Sólo puden usarse en algunas cláusulas como GROUP BY, ORDER BY o HAVING, en tanto no sean alias aplicados a funciones de agregación.