Hola iPaNiiCx:
Si la consulta que pones en tu post es la que realmente necesitas, no hay necesidad de utilizar un UNION, pues la información la estás extrayendo de la misma tabla, bastaría con utilizar una sentencia IN en el WHERE para poder aplicar la comparación de múltiples materias:
Código MySQL:
Ver originalmysql
> SELECT profesor.nombre
, curso.nombre
-> curso.nombre
IN ('Matemáticas', 'Inglés'); +--------------------+-------------+
| nombre | nombre |
+--------------------+-------------+
| Liliana Valenzuela | Matemáticas |
| Erika Lopez | Inglés |
+--------------------+-------------+
Y algunas observaciones adicionales, no es recomendable que utilices JOIN's sin especificar la cláusula ON o USING, ya que se realiza un producto cartesiano, en tu caso estás filtrando la información en el WHERE, pero esta filtración se realiza después de hacer el producto cartesiano, lo que puede afectar mucho el rendimiento de tus consultas. Checa este ejemplo para ver la diferencia:
Código MySQL:
Ver originalQuery OK, 0 rows affected (0.12 sec)
-> (2, 'Erika Lopez'), (3, 'Fulano de tal');
Query OK, 3 rows affected (0.03 sec)
+-------+--------------------+
| noEmp | nombre |
+-------+--------------------+
| 1 | Liliana Valenzuela |
| 2 | Erika Lopez |
| 3 | Fulano de tal |
+-------+--------------------+
Query OK, 0 rows affected (0.11 sec)
Query OK, 2 rows affected (0.03 sec)
+---------+-------+-------------+
| noCurso | noEmp | nombre |
+---------+-------+-------------+
| 1 | 1 | Matemáticas |
| 2 | 2 | Inglés |
+---------+-------+-------------+
mysql> #Sin poner ON o USING se realiza un producto cartesiano antes del where
+-------+--------------------+---------+-------+-------------+
| noEmp | nombre | noCurso | noEmp | nombre |
+-------+--------------------+---------+-------+-------------+
| 1 | Liliana Valenzuela | 1 | 1 | Matemáticas |
| 1 | Liliana Valenzuela | 2 | 2 | Inglés |
| 2 | Erika Lopez | 1 | 1 | Matemáticas |
| 2 | Erika Lopez | 2 | 2 | Inglés |
| 3 | Fulano de tal | 1 | 1 | Matemáticas |
| 3 | Fulano de tal | 2 | 2 | Inglés |
+-------+--------------------+---------+-------+-------------+
-> WHERE profesor.noEmp
= curso.noEmp
; +-------+--------------------+---------+-------+-------------+
| noEmp | nombre | noCurso | noEmp | nombre |
+-------+--------------------+---------+-------+-------------+
| 1 | Liliana Valenzuela | 1 | 1 | Matemáticas |
| 2 | Erika Lopez | 2 | 2 | Inglés |
+-------+--------------------+---------+-------+-------------+
mysql> #Con ON o USING, la comparación se realiza directamente
+-------+--------------------+---------+-------+-------------+
| noEmp | nombre | noCurso | noEmp | nombre |
+-------+--------------------+---------+-------+-------------+
| 1 | Liliana Valenzuela | 1 | 1 | Matemáticas |
| 2 | Erika Lopez | 2 | 2 | Inglés |
+-------+--------------------+---------+-------+-------------+
observa que aunque en las últimas dos consultas el resultado es el mismo, el primer caso no resulta óptimo. Con pocos registros no verías diferencias en los tiempos de respuesta, pero con tablas grandes verías que es mejor hacerlo con el ON.
Saludos
Leo.