Możesz użyć NOT EXISTS
SELECT a.id, a.name
FROM A
WHERE NOT EXISTS
(
SELECT 1 FROM B
WHERE b.A = a.id AND b.cond = 'X'
)
Jednak zawsze zapominam, że MySql jest jedynym (?) rdbms, który ma problemy z optymalizacją EXISTS /NOT EXISTS . Dlatego nieco bardziej wydajne jest użycie LEFT JOIN podejście.
https://explainextended.com/2009/09/18/not-in-vs-not-exists-vs-left-join-is-null-mysql/
W MS SQL-Server lepiej jest użyć NOT EXISTS .
https://sqlperformance.com/2012/12 /t-sql-queries/left-anty-semi-join