By default, Shadowheart should always choose to act upon her subconsciousness of being a Selune follower (she was only magically made by Viconia to follow Shar via memory wipe and 40 year's indoctrination). Her "default" choice is always to spare Nightsong.

This has nothing to do with her approval or your relationship with her.

Nightsong is a most critical turning point in Shadowheart's story. If Nightsong is not spared, Shadowheart will never be able to recover her memory and will forever remain a faithful follower of Shar. However, the subconscious version of Shadowheart will always force Shadowheart to spare Nightsong without even understanding why (due to memory wipe). Nightsong is the only means/entity in the game that enables Shadowheart to set upon the path for recovering her lost memory.

No idea what happened in your game. Are you surely you didn't try to "influence" her earning her approval?