Ciao, le due query funzionano in modo diverso, anche se poi arrivano a un risultato simile se non uguale (il che conferma che non esiste UN modo di fare le cose).
La tua estrae prima tutti i codici prodotto dalle offerte (a proposito, sarebbe più efficiente una SELECT DISTINCT) e poi estrae tutti i prodotti che NON solo in quella lista -- non so cosa faccia la WHERE sulle date ma direi che è fuori dal discorso generale che stiamo facendo.
La mia invece sfrutta la JOIN, mettendo in LEFT JOIN le due tabelle, di solito a sinistra quella che ha più item (o tutti gli item) e a destra quella che ha meno item (o gli item puntuali); a destra ti ritroverai quindi con una serie di colonne NULL, perché la JOIN per quegli item ha trovato solo le corrispondenze di sinistra; elencando quelle a sinistra che hanno NULL a destra avrai il risultato che ti serve.
Quale delle due è più efficace? Varia da caso a caso (e dalle esperienze personali). A me piace di più quella con la JOIN (soprattutto quando le cose si fanno più complicate), ma non è detto che sia la più efficace in tutti gli scenari.
![]()