Why z position does not match with gps altitude and alt-terrain_alt from vehicle_global_position? Why is there an offset between these values always? Why z position on ground shows 2m?

I have observed that the z position from vehicle_local_position and alt-terrain_alt (agl) from vehicle_global_position does not match exactly. There is always an offset between these two. Even on ground agl from vehicle_global_position is near 0 but z position shows 2m and Lidar sensor measures 0.1m. I have plotted gps, baro agl as well for reference. I have kept EKF2_HGT_REF as GPS and; EKF2_BARO_CTRL, EKF2_GPS_CTRL and EKF2_RNG_CTRL as enabled. I want to understand why AGL shown on QGC shows 2m even when on ground? Through analysis I got to know that AGL on QGC is z position from vehicle_local_position. Why is there an offset between z position and agl from vehicle_global position. Please refer following plots: