Código:
SELECT art_db.codigo,
art_db.nombre,
art_db.clase1 AS Familia,
art_db.clase2 AS Fabrica,
art_db.unidmed AS UM,
Stock_db.stk_fisico AS Stock,
art_db.art_dispon AS NV,
art_db.art_llegar AS OC,
Stock_db.stk_fisico - art_db.art_dispon + art_db.art_llegar AS Disponible
FROM (art_db LEFT OUTER JOIN Stock_db
ON art_db.nreguist = Stock_db.articulo)
WHERE art_db.tipo = 1
AND (Stock_db.cod_bodeg = 1 or Stock_db.cod_bodeg is null)
AND (Stock_db.numempstk = 1 or Stock_db.numempstk is null)
AND art_db.imputable = 1
AND art_db.eliminado = 0;
Las restricciones sobre Stock_db no pueden ser absolutas, si Stock_db.cod_bodeg tiene que ser 1, luego no saldran los registros que esten en art_db y no esten en Stock_db puesto que si no estan no pueden tener un 1 en ese campo, si permites el nulo luego si saldran....
Los parentesis verdes son absolutamente necesarios....
Stock_db.stk_fisico - art_db.art_dispon + art_db.art_llegar AS Disponible
No se que bbdd usas pero esto puede dar error cuando Stock_db.stk_fisico sea nulo tienes que buscar una función definida en tu motor que convierta los nulos a cero (nz() o ifnull() depende del motor que uses)
Quim