Kayak (and Momondo) can be cheaper because price queries routed via aggregators are part of a competition between OTAs for the top listing so they do tend to reduce prices slightly relative to what you might see direct. Same is incidentally true of Google Flights in some circumstances.
You'll also see variations if you go via cashback sites, in this case the price you see is often bumped a bit upwards to make room for the cashback.
The other trick that's pulled is use of browser fingerprinting to raise the price progressively offered by OTAs, so you don't see the lowest price offered directly to someone accessing the site for the first time on a different browser. This is a classic Opodo/Edreams trick.