se prevedi che una tabella (tb2) abbia piu' record non riferiti in tb1 e vuoi vedere questi record di tb2 non riferiti, devi usare un right join (nel tuo caso) e non una inner join.
ho lasciato come hai scritto tu, ma non ha senso select tb1.* se si richiedono i campi inesistenti. cosi' come il raggruppamento deve essere sulla tb2.codice:query2: "SELECTtb1.*, max(tb2.data) as data_2 FROM tb1 right join tb2 ON tb1.codice1 = tb2.codice2 WHERE tb1.codice1 IS NULL AND tb2.data = '' GROUP BY tb2.codice2"