Я рекомендую использовать:
SELECT t.pid,
t.txt,
t.price,
t.qty - IFNULL(qs.qty_sold, 0) 'onhand_qty'
FROM PRODUCTS t
LEFT JOIN (SELECT o.pid,
SUM(o.qty) 'qty_sold'
FROM ORDERS o) qs ON qs."o.pid" = t.pid
WHERE t.pid = ?
Хотя это работает, использование коррелированных операторов SELECT в предложении SELECT будет иметь худшую производительность, поскольку они выполняются один раз для каждой строки, возвращаемой в вашем запросе.
IFNULL предпочтительнее использовать в этом случае по сравнению с COALESCE. COALESCE предназначен для проверки значения 2+ на нулевое значение, создавая ложное впечатление, когда кто-то еще читает ваш код. Никакой неотъемлемой выгоды нет - согласно документации, они одинаковы.
Ссылка: Основные функции SQLite