o
Грубо говоря, после вызова функции с этими аргументами, повторный вызов будет взят из кеша, если внутри иммутабл функции нет вызова "недетерминированных" функций. Типа рандом, или вот клок_таймстамп.
И в рамках одной транзакции вызов твоей функции с теми же аргументами будет заменён на значение из кеша.
Тут нет противоречия.
Как написано в доке - в постоянной функции можно использовать селекты. Но, видимо, с осторожностью, так как будет использован свой снапшот, и при изменении данных - значения будут неактуальными.