Как вам уже сказали, ошибка связана с тем, что предложение WHERE ничего не знает о значениях, которые вы на самом деле выбираете, поскольку оно оценивается до предложения SELECT.
В общем, вы можете решить эту проблему, используя весь запрос как производную таблицу, и в этом случае псевдоним matched_sections
становится доступным для внешнего запроса:
SELECT
id,
matched_section
FROM (
SELECT
articles.id,
(SELECT COUNT(id) FROM site_areas_site_sections WHERE
site_areas_site_sections.site_area_id = 8) AS matched_sections
FROM
articles
LEFT JOIN
articles_site_sections ON articles_site_sections.article_id = articles.id
LEFT JOIN
site_areas_site_sections ON articles_site_sections.site_section_id =
site_areas_site_sections.site_section_id
) s
WHERE
CASE
WHEN matched_sections > 0
THEN …
END
Если ваше исходное условие содержит ссылки на столбцы, которые не предназначены для извлечения, вам необходимо добавить их в список выбора производной таблицы, чтобы вы могли использовать их в условии внешнего запроса.
В тех случаях, когда подзапрос не коррелирует с основным запросом (и это не в вашем примере), решения @Joe и @Dirk, возможно, являются лучшими вариантами, чем приведенное выше предложение.