Ваш первый запрос, безусловно, не будет работать как есть.
Чтобы понять ваш второй запрос, имейте в виду, что
A SELECT
без предложения FROM
похоже на предложение FROM
с таблицей, в которой нет столбца, но есть одна строка.
Вы можете ссылаться на столбцы из внешнего запроса в подзапросе.
Вот попытка объяснить ваш запрос:
SELECT * FROM abc a
/* ok, now we have a table with alias "a" */
INNER JOIN abc b ON b.id = a.id
/* now we also have a table with alias "b" */
WHERE a.id IN
(SELECT id
FROM (SELECT a.id,
/* this will count the one "artificial" row */
row_number() OVER () lp
/* Here you reference the table with alias "b" above.
This is constant as far as the subquery is concerned,
so if it is not TRUE, the subquery will return an
empty result */
WHERE b.name = 'abc') x
/* this is always true, since there is only one line in
the above subquery */
WHERE lp = 1);