У меня есть таблица foo и панель таблиц, где у каждого foo может быть строка (и строка может принадлежать нескольким foos).
Теперь мне нужно выбрать все столбцы. Мой sql выглядит так
SELECT *
FROM foo f
WHERE [...]
AND ($param IS NULL OR (SELECT ((COUNT(*))>0)
FROM bar b
WHERE f.bar = b.id))
с заменой $ param во время выполнения.
Вопрос в следующем: будет ли выполняться подзапрос, даже если param равен нулю, или dbms оптимизирует этот подзапрос?
Мы используем mysql, mssql и oracle. Есть ли разница между ними в отношении вышеизложенного?