Вопрос не понятен от слова совсем.
Сразу скажу.
Несмотря на то, что условия пишутся одинаково, необходимо разделять условия связи двух таблиц и условия фильтрации/отбора. Логически условия отбора фильтруют итоговый массив строк, полученный после связывания всех таблиц. Технически фильтрация может выполняться раньше.
Т.о. условия связи в данной задаче надо оставить под инструкцией ON, а условия фильтрации вынести в инструкцию WHERE.
И да, (совет №1) не забывайте писать алиас таблицы перед именем поля, даже если в другой таблице такого поля нет. Ведь завтра оно может там появиться и код работать не будет. Научитесь (совет №2) придумывать короткие алиасы к таблица. А лучше систему получения коротких алиасов. Это пригодится в будущем, когда количество таблиц в системе и в запросе станет увеличиваться.
Возможно, я неправильно предположил суть вопроса, но должно получиться что-то похожее на
SELECT
c.id
, c.pagetitle
, c.parent
, tv.id
, tv.tmplvarid
, tv.contentid
, tv.value
FROM modx_site_content AS c
RIGHT JOIN modx_site_tmplvar_contentvalues AS tv ON c.id = tv.contentid
WHERE c.parent = 22923
AND ( tv.tmplvarid, tv.value ) IN ( ( 20, 4 ), ( 20, 6 ), ( 19, 10 ) )
ORDER BY c.id ASC
И последнее. Мне на 99% кажется, что исходя из имен таблиц, здесь должен быть не RIGHT, а LEFT JOIN.