Tu problema es que no estás comprendiendo el compotamiento de los operadores lógicos OR y AND. Estás olvidando los principios básicos de Lógica Proposicional. POr eso tu consulta termina realizando dos busquedas basadas en un set diferente de condiciones en cada caso.
OR es una
disyunción, mientras que AND es una
conjunción, esto implica que AND obliga al cumplimiento de las dos condiciones que separa, pero OR considera separadamente cada una, y devuelve todos los casos donde se de una
u otra... o ambas a la vez.
Así de simple.
Si pongo tu query simplificada (por favor, aprende a usar los alias), la cosa sería esta:
Código MySQL:
Ver original ES.materia,
ES.especialidad,
ES.idmateria,
CP.idespecialidad idesp,
CP.idplan idplan
siin_control_escolar.`esc_cal_planes` CP
siin_control_escolar.
`esc_especialidades` ES
ON ES.idespecialidad = ES.idespecialidad
CP.`IDCARRERA` = 6
OR CP.
`MATERIA` LIKE '%ingles%' AND CP.
`CUATRIMESTRE` = 1
Ahora bien, el WHERE contiene dos sets de condiciones, como te dije.
Este es uno:
Y este es otro:
Para que puedas evaluar como una sola condicion la materia en "MATERIA", ambas condiciones unidas por el OR deben quedar contenidas entre paréntesis:
Código MySQL:
Ver original ES.materia,
ES.especialidad,
ES.idmateria,
CP.idespecialidad idesp,
CP.idplan idplan
siin_control_escolar.`esc_cal_planes` CP
siin_control_escolar.
`esc_especialidades` ES
ON ES.idespecialidad = ES.idespecialidad
CP.`IDCARRERA` = 6
OR CP.
`MATERIA` LIKE '%ingles%') AND CP.
`CUATRIMESTRE` = 1
Así SI, la base resuelve esas dos condiciones como una sola, y luego resuelve la resultante en funcion de las otras.
¿Se entiende?
Posdata: Quité el "idcarrera= 6" del FROM porque era redundante, ya que la misma condición la estabas poniendo en el WHERE. No necesita ir en ambas partes...