As with all sensors, there will be variance between readings. Variances could come from a variety of places such as:
- Variances in the soil (water content, temperature, soil composition)
- Variances in the environment (humidity)
- Variances in the test method (depth inserted into the soil, time the sensor is left in the soil, contact between the soil and the sensor [which will change every time the sensor is moved any distance in any direction], etc)
- Variances in the sensor itself/hardware (sensor degradation/corrosion over time, manufacturing differences, build-up of soil on the sensor, supply voltage, resistance in the output signal line, connection between the UTM and the tool etc)
Your soil sensor sounds like it is working properly (high values when submerged in water, low values when in the air, and readings in-between when in soil).
Because the Arduino will output an analog reading between 0 and 1023, perhaps you are expecting the range of values between measurements to be within a few whole numbers. For example: 542, 546, 543. This is an unrealistic expectation due to all the possible variances.
Instead, dividing the output by 100 and rounding to the nearest whole number provides a more realistic interpretation of the data. This would have given you outputs of 9 in water, 2 in air, and 6 to 7 in your soil.
Hopefully that sheds some light on what you can expect from the sensor. Oh, it is also important to keep in mind that the sensor included in the kits is an inexpensive hobby sensor. There are of course much more expensive sensors and testing equipment that could provide more consistency and accuracy.