The expression for keyCol on the right hand side here refers to a row that does not connect to the tMap. row12 is earlier on in the flow, on the other side of a tDenormalize component, so there's no way that the row12 object will still have meaningful data when this expression is executed. I think in practice it always has a fixed value from the last row to be processed in the tMap that row12 linked into. One to watch out for - I'm surprised that this even compiled.
This is because you have a row called "row12" and a column called "keyCol" connected to that row, somewhere else in the job. It looks like you have potentially dropped a new component between the old component and the tMap or maybe renamed the row feeding the tMap. As the Java variable row12.keyCol exists in your job, it will not fail on compilation. However it will likely cause problems
Talend named a Leader.
Kickstart your first data integration and ETL projects.
Watch the recorded webinar!
Learn how to make your data more available, reduce costs and cut your build time
Read about OTTO's experiences with Big Data and Personalized Experiences
Take a look at this video about Talend Integration with Databricks