Ver Mensaje Individual
  #2 (permalink)  
Antiguo 25/02/2012, 06:19
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Problemas con LEFT JOIN

El orden de los factores si altera el producto en el SQL.
El asunto es simple: Como LEFT JOIN trae lo de la tabla izquierda, tenga o no coincidencias con la derecha, pero tu estás poniendo como primera tabla la de los pagos, la respuesta será la lista de pagos, tengan o no coincidencias con los alumnos... Y como no hay pago sin alumno, está funcionando como INNER JOIN.
Lo que tienes que poner primero es la tabla donde está la lista mayor, que de donde la segunda toma datos, esto es:
Código MySQL:
Ver original
  1.     a.idAlumno,
  2.     nombre,
  3.     aPaterno,
  4.     aMaterno,
  5.     ap.matricula,
  6.     m.matricula total,
  7.     (m.matricula-ap.matricula) debe
  8.     alumno a LEFT JOIN alumnopago ap ON a.idAlumno = ap.idAlumno
  9. WHERE (TRUE OR ap.matricula IS NULL);
De ese modo traerá a toda la lista de alumnos hayan hecho o no pagos.
Cita:
estos querys yo los corro normal en SQLServer 2008
Eso es medio irrelevante, porque la lógica interna de los DBS es diferente en cada uno (en Oracle esta consulta no funcionaría, porque se escribe distinto). Lo que sucede es que SQL Server lo implementa de otro modo y requiere otras cláusulas.
Cuando cambias de DBMS tienes que andar todo el tiempo con el manual a un lado. Siempre. No des por sentado que todos los DBMS hacen las cosas de la misma forma.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)