Definition of causality of a system in Discrete Time Signal Processing [Alan V. Oppenheim]
Consider, for example, a moving average window. At any time $n$ the output $y[n]$ will equal the average $\frac{x[n-1]+x[n]+x[n+1]}{3}$. Now let us choose:

$$x_1[n]=\begin{bmatrix}1 \\  1 \\  2   \end{bmatrix}, x_2[n]=\begin{bmatrix}1 \\  1 \\  3   \end{bmatrix}$$

Hence for $n_0=2$ we have:

$$x_1[n]=x_2[n]\forall n\leq n_0$$

$$y_1[2]=\frac{1+1+2}{3}=\frac{4}{3}\neq \frac{5}{3}=\frac{1+1+3}{3}=y_2[2]$$
$$y_1[2]\neq y_2[2]\forall n\leq n_0$$

Basically, as all answered where stated, causality wishes to show independence of the output from any future input. The complicated form of definition comes from continuous-time where a system is causal iff:
$$x_1(t)=x_2(t)\forall t&lt; t_0 \Rightarrow y_1(t)=y_2(t)\forall t&lt; t_0$$ 
An example of a non-causal system here would be a differentiation system as a differential is defined around the area of the point and for any point, $t_0$ will require an $\epsilon$ to the past and an $\epsilon$ to the future. This is why we require a soft inequality with respect to $t_0$. Discrete-time does not present such a problem. 

In general, most physical systems are causal (they can't see into the future). More to the subject of signal processing, any real-time signal processing method is, roughly, causal. I did heard of systems (radio\TV) that delay the signal for a buffer of a second in order to do some processing and transfer it. I am not sure if this is called real-time, though it will probably be non-causal (otherwise, why delaying??). Any off-line method may also be causal or non-causal.