The Create Row block is asynchronous, meaning that it runs its code while Thunkable continues to evaluate code after it. Thunkable does not wait for it to finish unless you put all other code in the “do” section of the block. So a loop that creates rows with a specific variable object (in your case “j”) may create a row with the wrong information or have other unpredictable results.
See this post to learn more about how this issue affects loops: Wrapping Asynchronous (then do) blocks into a Synchronous Function resolves unpredictable results