There are several factors that could contribute to the Spatial Join tool producing unexpected output.
A likely cause for unexpected output of a spatial join is that the tolerance of the data is too large for the resolution. This causes features to be considered 'touching,' 'within,' 'identical to,' 'intersecting,' or to have some other relationship that is not actually true when the data are viewed at a very large scale, such as 1:10, 1:1, or 1:0.1.
A recommended best practice is to set the tolerance to ten times the resolution. Tolerance is the distance within which vertices are considered coincident.
For more information, refer to ArcGIS Help - Feature Class Basics, specifically the subtopics Feature Tolerances, X,Y resolution, and X,Y tolerance.
The Spatial Join tool could produce unexpected output if the two feature classes do not share the same coordinate system, projection, tolerance, or resolution.
Verify that these properties are the same. If they are not, consider reprojecting one of the feature classes to the coordinate system of the other. This may require applying a geographic transformation during reprojection; refer to the following articles for more details: How To: Select the correct geographic transformation when projecting between datums and How To: Determine which NAD_1983_To_WGS_1984 transformation to use. The purpose of reprojecting one of the feature classes is to allow the Spatial Join tool to compare features in the same coordinate system, tolerance, and resolution.
For more information, refer to ArcGIS Help 10.1 - Choosing an appropriate transformation and ArcGIS Help 10.1 - Specifying a coordinate system.
If the spatial join is done with ArcMap's Join command, joining data from another layer based on spatial location, examine the coordinate system of the two layers and of the map dataframe to be sure they are compatible as described above, and that any necessary geographic transformation has been set in the dataframe properties.
Factors such as tolerance and resolution cannot be changed in an existing dataset. Create a new feature class with the desired resolution and tolerance. There are a number of tools that can load data from the original feature class into a new one:
- The Object Loader in ArcMap
- The Simple Data Loader in ArcCatalog or the Catalog window in ArcMap
- ArcToolbox > Data Management Tools > General > Append
For more information about the loader tools, refer to ArcGIS Help - Loading data and ArcGIS Help - Append.
For comparing spatial properties such as distance and position, it is recommended that a projected coordinate system (with linear units of feet, meters, etc.) be used, rather than a geographic coordinate system (with angular units of degrees).