Buenas...
No entiendo exactamente lo que quieres decir con que te imprime resultados diferentes de la base... ¿qué base?
En principio, te diría que el código es correcto, pero que sólo te imprimirá entradas hasta que se agote uno de los ResultSet (el más pequeño)
Creo que la mejor idea sería que modificases tu código para hacer una sóla llamada a la Base de Datos, obteniendo un solo ResultSet:
SELECT *
FROM Productos prod, InventarioFisico inv
WHERE prod.nombreAlmacen = XXXX
AND prod.nombreAlmacen = inv.nombreAlmacen
AND prod.kkkk = inv. kkkk
#para todos los campos que puedas unir entre estas dos tablas.
De todas formas... ¿Estás seguro de que la lógica que usas dentro del bucle while doble es la misma que cuando haces dos bucles while? Aunque esté mal el resultado, ¿el número de filas que imprime es el mismo en los dos casos?
Gracias.
Silverfox