Saltar al contenido

NOT IN con subconsulta me devuelve cero filas

Benjamín R.

Nivel 3 ·

Quiero los productos que nunca se vendieron: SELECT * FROM productos WHERE id NOT IN (SELECT producto_id FROM ventas); Sé que hay productos sin ventas, pero la consulta devuelve vacío. ¿Qué pasa?
354 vistas 5 respuestas 3 0

Respuestas 5

  1. eduardo S.

    Nivel 3 ·

    1 0

    Casi seguro hay algún producto_id NULL en ventas. Si la lista del NOT IN tiene un NULL, la condición nunca da verdadero: id <> NULL es desconocido, y todo el NOT IN termina siendo desconocido o falso.

  2. Facundo F.

    Nivel 3 ·

    0 0

    Solución rápida: agregá WHERE producto_id IS NOT NULL dentro de la subconsulta.

  3. Damián R.

    Nivel 3 ·

    0 0

    Mejor todavía, usá NOT EXISTS, que no tiene ese problema: SELECT * FROM productos p WHERE NOT EXISTS (SELECT 1 FROM ventas v WHERE v.producto_id = p.id);

  4. Benjamín R.

    Nivel 3 ·

    0 0

    Era eso! Había ventas viejas con producto_id NULL. Cambié a NOT EXISTS y anda.

  5. yorman R.

    Nivel 3 ·

    1 0

    Y de paso fijate por qué hay ventas sin producto. Eso huele a que falta un NOT NULL o una clave foránea.