Risotto!!! 😃
Come immaginavo, il problema, nel mio caso, era dovuto al fatto che per anni ho utilizzato il campo 'lotto' come seriale, in quanto avevo poi modificato il codice di OSM (tipo 2.1) per fargli fare ciò che serviva a me e che ora invece fa di default.
Quindi la query che cercava i serial restituiva una serie di NULL che evidentemente non digeriva.
SELECT DISTINCT serial AS id, serial AS descrizione
FROM mg_prodotti
WHERE dir='uscita'
AND mg_prodotti.id_articolo = 'xxx'
AND serial NOT IN
(SELECT serial
FROM mg_prodotti
WHERE dir='entrata'
AND serial NOT IN
(SELECT serial
FROM mg_prodotti
WHERE id_riga_ddt = 'yyy'));
È bastato fare una query che copiasse tutti i valori dal campo 'lotto' al campo 'serial', laddove non ce ne fosse già uno.
UPDATE mg_prodotti AS t1, mg_prodotti AS t2
SET t2.serial = t1.lotto
WHERE t2.id = t1.id
AND t2.serial IS NOT NULL;
In questo modo, tra l'altro, posso di nuovo vedere lo storico dei seriali degli ultimi anni 😉