Про альтернативу “join vs window functions” я не слышал, все же у них разное предназначение.
По идее, любой возможный запрос с window functions на корректно нормализованной базе можно написать без них (как раз с помощью JOIN, в том числе), "классически". Т.е. именно в плане возможностей (написать то, что без них было бы невозможно) window functions не добавляют почти ничего.
И мне лично это мешает иногда — в тех случаях, когда кажется, что какой-то запрос можно написать с их помощью, а потом думаешь / пробуешь — нет, нельзя (и вот они JOIN-ы). ;)