La verdad no entendi bien tus problemas...
Creo que los encuentros debes plantearlos siempre contra la tabla productos... algo como:
From (Productos.db P LEFT JOIN Stock.db S
ON P.Codigo = S.codigo)
LEFT JOIN Pedidos.db PP ON
P.Codigo = PP.Codigo
1.- como asi???
2.- es lo que decia antes...
3.- los que no aparecen son los que no tienen registro de stock, dado que (NULL < CualquierCosa) nunca devolverá TRUE... será siempre NULL (lógica ternaria)... por lo tanto:
having sum(S.Stock) < P.StockMinimo
or sum(s.Stock) is null
4.- claro... estas haciendo un producto cartesiano, y luego la suma sobre ese producto. Un workaround si no deseas ese efecto, podes usar una vista (o un select anidado si lo soporta Paradox) que haga el primer join y luego usar min o max para obtener el valor (ya sumado en la vista).
Ahora falta ver si tu motor reconoce la sintaxis...
Hasta luego.