Bueno, con tantos problemas es mejor ir al
Manual de Referencia:
Cita: El NATURAL [LEFT] JOIN de dos tablas se define semánticamente equivalente a un INNER JOIN o LEFT JOIN con una cláusula USING que nombra todas las columnas que existen en ambas tablas.
De esto se desprenden dos cosas:
1) Para usarlo sin condición ON o USING requiere que se crucen
todos los campos de ambas tablas, y evidentemente que los campos tengan
nombres iguales, tipos de columna iguales, y valores iguales para devolver algo.
2) Se puede suplantar un NATURAL JOIN por un INNER JOIN, sin problemas, porque para el parser de MySQL son equivalentes, con lo que obtendrás mejores resultados.
En el contexto del primer punto, puede que haya problemas si los campos se denominan diferente, o son cantidades diferentes de campos, ya que uno de los campos será cruzado con NULL, con lo que no devolvería nada.
Además, al poner NATURAL JOIN sin condición ON
se están cruzando dos campos que tienen dominios distintos:
`componente`.`nombre`, contiene los
nombres de los componentes, mientras que
`categoria`.`nombre` contiene los
nombres de las categorías... Eso significa que son
dominios incompatibles.
Entonces, esto:
Código MySQL:
Ver original C.nombre nombre1,
CA.nombre nombre2,
C.codcomponente,
CA.codcategoria
sería equivalente a esto;
Código MySQL:
Ver original C.codcomponente `Nro. Componente`,
C.nombre `Componente`,
CA.codcategoria `Id. Categoria`
CA.nombre `Categoria`